一、作用
由于某些原因(死锁、死循环、锁等待),Java进程有时候会出现CPU过高的情况,如果能了解当前Java进程中的每个线程消耗的CPU量以及对应的线程栈,对于问题的定位十分有帮助。
二、使用方法
1. 代码
|
|
有关代码的实现细节,见第三节。
2. 使用
|
|
3. 返回结果
|
|
例如返回结果如下:
|
|
三、脚本实现思路
1.利用top -H -p ${pid}找到当前进程下所有线程,按照cpu倒序topN
|
|
2.使用jstack ${pid}记录下进程快照
3.将第一步中的线程id(第一列)转为是十六进制,在jstack中寻找进记录栈信息(grep -A)
例如十进制37745的十六进制是0x9371,可以在jstack的快照找到对应的堆栈:
|
|
|
|