找到最耗CPU的java线程
1 找出占用cpu过高的进程ID号
命令: top -c
2 找出该进程下,运行时间过长的进程 id号.
命令:ps -mp 10024 -o THREAD,tid,time | sort -rn
3 因为在java堆栈日志中,线程id以 16 进程存储,因此我们需要先把 10 进制的线程id,转为 16 进制.
命令:printf "%x\n" 11490
4 通过 jdk自带的jstack工具,打印堆栈异常信息.
通过 printf "%x\n" 30834 首先转化成16进制, 继续通过jstack命令dump出当前的jvm进程的堆栈信息。 通过Grep命令即可以查到对应16进制的线程id信息,很快就可以找到对应最耗CPU的代码快在哪。
命令:sudo ./jstack 10024|grep 2ce2 -A 30
- "DboServiceProcessor-4-thread-295" daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]
nid : 对应的linux操作系统下的tid,就是前面转化的16进制数字
tid: 这个应该是jvm的jmm内存规范中的唯一地址定位,如果你详细分析jvm的一些内存数据时用得上,我自己还没到那种程度,所以先放下