排查过程
查消耗cpu最高的进程Pid 根据Pid查出消耗cpu最高的线程号 根据线程号查出对应的java线程,进行处理。
查消耗Cpu最高的进程PID
执行命令
- 执行
top -c
,显示进程运行信息列表。按下P,进程按照Cpu使用率排序
如下图所示,PID
为3033
的进程耗费Cpu
最高
根据Pid查出消耗Cpu最高的线程号
执行命令
-
top -Hp 28632
- 显示一个进程的线程运行信息列表。按下P,进程按照Cpu使用率排序
如下图所示,PID
为28632
的线程耗费Cpu最高
这是十进制的数据28667,转成十六进制为6ffb
printf "%x 10" 28667
根据线程号查出对应的java线程,进行处理
jstack -l 28667 > /tmp/28667.stack
然后执行,grep命令,看线程0xbda
做了什么
cat 28668.stack |grep '6ffb' -C 8
输出如下
至此定位到问题