如果Java程序中不小心出现了死循环,或者线程没有处理好休眠间隔那么就会导致cpu使用率非常高。如果肉眼没法找到问题那么可以使用JDK自带的工具jstack。
1、使用top命令找到占用cpu最高的进程ID。
2、cd到jdk的bin目录:./jstack 进程id > xxx.out。
3、使用top -H命令找到占用cpu最高的线程ID。
4、把线程ID转成java的16进制去xxx.out文件里面匹配,应该就能找到具体是那行代码导致的CPU问题。
一下是10进制转16进制的sh
#!/bin/sh
nid=`python -c "print hex($1)"`
grep -i $nid $2
命名为test.sh。执行:./test.sh 线程ID jstack.out,就可以查找出来。