确认CPU消耗情况:
top 或 htop找到Java进程PID:
top或ps命令中可以看到PID。jps命令。分析线程CPU消耗:
top -H -p 或 ps -mp -o THREAD,tid,time printf "%x\n" <THREAD_ID>
使用jstack获取线程Dump:
jstack工具获取线程堆栈信息:jstack -l <PID> > threaddump.txt
分析线程Dump:
threaddump.txt文件,找出之前高CPU消耗的线程ID对应的堆栈信息。搜索对应的十六进制线程ID(例如:0x2a),通常每个线程会以如下格式开头:"Thread-1" #2 prio=5 os_prio=0 tid=0x00007f8e99800000 nid=0x2a runnable [0x00007f8e8b8f7000]
理解线程堆栈信息:
runnable 的线程。进一步分析和解决问题:
采取措施:
假设已经找到高CPU消耗Java进程的PID为1234,并且对应的高CPU消耗线程ID为4567:
获取高CPU线程的十六进制ID:
printf "%x\n" 4567
使用jstack获取线程Dump:
jstack -l 1234 > threaddump.txt
在threaddump.txt中搜索0x11d7(假设转换结果为0x11d7)。