第一步先找出Java进程ID,我部署在服务器上的Java应用名称为mrf-center:
root@ubuntu:/
# ps -ef | grep mrf-center | grep -v grep
root 21711 1 1 14:47 pts
/3
00:02:10 java -jar mrf-center.jar
得到进程ID为21711
第二步找出该进程内最耗费CPU的线程,
可以使用ps -Lfp pid 或者 ps -mp pid -o THREAD, tid, time 或者 top -Hp pid, 我这里用第三个,输出如下:
TIME列就是各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为21742的线程,
用
printf
"%x\n"
21742
得到21742的十六进制值为54ee,下面会用到
OK,下一步终于轮到jstack上场了,它用来输出进程21711的堆栈信息,然后根据线程ID的十六进制值grep,如下:
root@ubuntu:/
# jstack 21711 | grep 54ee