Java定位CPU使用100%的方法
流程:把线程dump出来,然后分析
1:Threaddump的方法:
- kill -3 pid
- jstack -l pid
- jvisualvm中来thread dump
2:找到导致cpu高的线程
top -H -p pid
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4691 root 19 0 448m 132m 13m S 0.0 7.5 0:00.01 java
4692 root 19 0 448m 132m 13m S 0.0 7.5 0:00.39 java
4698 root 15 0 448m 132m 13m S 0.0 7.5 0:14.14 java
4699 root 15 0 448m 132m 13m S 0.0 7.5 0:00.43 java
4700 root 15 0 448m 132m 13m S 0.0 7.5 0:00.63 java
4701 root 18 0 448m 132m 13m S 0.0 7.5 0:00.00 java
对应的线程id是十进制的,需要转换为十六进制的在threaddump文件中才可以看到
3:十进制转十六进制
-bash-3.2# python
>>> print hex(4739)
0×1283
4:找到对应的线程
vi threaddump.log
查找:/0×1283
找到对应的线程,把相关的方法找出来,可以精确到代码的行号,自己修改相关源码来fix bug。