目录
问题背景:要往 es 集群写日志,但当时 es 集群异常宕机,主线程写不进去数据抛出异常,但是异常内,又重新调用了 es 写的方法,导致死循环,线上服务器CPU负载接近100%,那么如何排查了?
1、定位耗费 cpu 的进程
查看进程列表:top c
输入P,按照 cpu 使用率进行排序:P
2、定位进程内耗费 cpu 的线程
查看进程内线程列表:top -Hp 13477
输入P,按照 cpu 使用率进行排序:P
3、定位那个方法导致 cpu 过高
printf '%x/n' 13523 -> 34d3/n # 将ID转换为十六进制(因为在
jstack
输出的堆栈信息中线程ID为十六进制格式)jstack 13477 | grep 34e9/n # 打印进程 13477 的堆栈中线程id 13523 的信息
可以打印出那个雷下的方法导致问题。