排查思路:
1、先找到占用CPU高的进程PID top命令
2、top -H -p <PID> 查看哪个占用CPU高的线程Thread-ID,先把它记下来,留待第4步使用
3、jstack <PID> /home/aaa.log 将堆栈信息存储到文件中,下载文件
4、将步骤2的线程ID,转成十六进制,在aaa.log中搜索,便可以看到该线程的调用栈,便可知道该线程在执行什么代码
补充说明:
1、查看线程的执行时长: ps -mp <PID>-o THREAD,tid,time
2、linux下,将十进制转成十六进制: printf %x <TID>
3、打印堆栈信息(-A可以打印多少行): jstack pid | grep <TID> -A 100
4、查看某个PID对应的是哪个程序: ps <PID>
5、线程状态:WAITING、RUNNABLE、TIMED_WAITING....