今天发现有个java应用占用CPU一直很高,将查看哪个线程导致CPU占用率高的方法总结如下:
- 查看进程PID
使用top、ps等命令都可以,这里使用top:
可以看到PID=7679和PID=7745的进程占用CPU都很高。 - 通过top -Hp PID命令查看进程下线程CPU占用情况
可以通过输入P查看占用CPU最多的线程;输入M查看内存占用最高的线程。这里看到PID=7820和7818的线程占用CPU很高。 - 将线程PID转为十六进制
Linux提供了很方便的工具,直接输入print “%x\n” 7818即可将7818转为十六进制输出。 - 打印进程堆栈
jstack 进程id > ps.txt - 打开堆栈文件,搜索第三步中十六进制的线程ID,可以看到这个线程的堆栈,从而定位到该线程。