使用top
命令查看哪一个进程的cpu使用率高,得到它的进程id
通过
ps H -eo pid,tid,%cpu | grep 进程pid
查看该进程下面哪些线程使用cpu高。由于使用jstack分析pid时会出现该进程下所有线程的分析情况,数据量大,所以要知道具体是那个线程cpu过高,我们再看相应的分析情况。而jstack分析信息里面线程用的16进制表示,我们要把刚才得到的线程id转化成11进制。计算器或者
printf '%x' 十进制数
都可以。然后使用
jstack pid | grep tid(0x) -A20
寻找分析信息中从包含16进制线程id开始后的20行信息。可以看到是Main的第5行出现问题。去java文件看看,vim的命令行先输入
:set number
显示行号。问题排查结束。