1、使用jps查找正在运行的java进程
2、通过使用top命令查找该线程下CPU使用最高的线程
top -Hp pid: 即 top -Hp 2860
3、
TIME列就是各个Java线程耗费的CPU时间,显然CPU时间最长的是ID为2968的线程,用
[plain] view plain copy
printf "%x\n" 2968
得到2968的十六进制值为b98,下面会用到。
4、
终于轮到jstack上场了,它用来输出进程2860的堆栈信息,然后根据线程ID的十六进制值grep,如下:
[plain] view plain copy
[root@storm-master home]# jstack 2860 | grep b98
"SessionTracker" prio=10 tid=0x00007f55a44e4800 nid=0xb53 in Object.wait() [0x00007f558e06c000
可以看到CPU消耗在SessionTracker这个类的Object.wait(),于是就能很容易的定位到相关的代码了。