相信大家肯定遇到过java程序cpu一直居高不下的情况,那么我来简单介绍在linux系统下如何定位java进程cpu过高的代码位置。
- 首先,使用命令
top,找到cpu过高的pid;
- 接着,使用
top -Hp pid 找到对应的线程 tid;
- 我们知道jstack可以查看当前java进程的堆栈状态;由于线程在堆栈信息的使用16进制的。那么,
printf "%x" tid 可以获取16进制的 tid16。
- 最后使用
jstack pid |grep -A 10 tid16 ,根据情况调整行数后,就可以看到该线程是执行的代码。