使用top命令查找在大量占用CPU的进程的PID
使用
ps -mp pid -o THREAD,tid,time
定位到大量占用CPU的线程TID;也可以用这个命令直接排序下,更方便找到大量占用CPU的线程:
ps -mp pid -o THREAD,tid,time|uniq -c|sort -nr
将上述找到的线程TID转换成十六进制:printf “%x\n” TID,比如原本的线程TID是28802,可以用上面的命令转成十六进制数7082
使用PID以及刚刚转成十六进制的TID来打印出该线程的堆栈信息:
jstack PID|grep TID -A 100
也可以把完整的堆栈信息输入到一个log文件里,有两种方法:
方法一是用
kill -3 PID > threadDump.log 2>&1,这种方法不适用于JDK1.6以上的版本
方法二是用
jstack -l PID > threadDump.log 2>&1
接下来就是分析堆栈信息,定位到问题代码的位置了。
简单介绍下上述命令的几个关键参数的含义:
ps命令:
-m 显示所有的执行者。
-