在开发过程中,碰到了Java进程占用cpu过高的现象,本篇来介绍一下排查思路。
1. 查看占用CPU过高Java进程
使用 top -p <pid>
命令(为Java进程的id号)查看Java进程的cpu占用:
该Java进程占用cpu达到100%。
top -p <pid>
2. 查看进程是所有线程的情况
使用 top -Hp <pid>
命令(为Java进程的id号)查看该Java进程内所有线程的资源占用情况:
- 按
shft+p
按照cpu占用进行排序, - 按
shift+m
按照内存占用进行排序
此处按照cpu排序。可以看到,有线程占用cpu很高。
top -Hp <pid>
3. 查看线程的16进制
使用 printf "%x\n" <tid>
命令(tid指线程的id号)将以上10进制的线程号转换为16进制:
printf "%x\n" <tid>
转换后的结果分别为4ea0
,由于16进制以0x
开头,所以对应的16进制的线程号为0x4ea0
。
4. 获取线程快照
使用命令