1.1 写一份死循环代码
public class CpuExample extends Thread{
public void run(){
while(true){}
}
public static void main(String[] args){
CpuExample ce=new CpuExample();
ce.start();
}
}
1.2 编译运行代码
[root@VM-8-15-centos mnt]# javac CpuExample.java [root@VM-8-15-centos mnt]# java CpuExampl
1.3 top查看系统cpu情况
可以看到目前java 进程的cpu已到达100%
2.通过jstack命令查找cpu100%原因2.1 首先通过top查找占用cpu最大的pid
可以看到应用pid为 22769
2.2 查找pid对应占用cpu最大的 tid
在top界面 使用 shift + h 可切换到线程界面
可以看到对应的tid为 22796
将tid转换为16进制 为 0x590c
[root@VM-8-15-centos ~]# printf “0x%x” 22796 “0x590c”[root@VM-8-15-centos ~]#2.3 jstack查找对应的堆栈信息
jstack pid |grep -A 20 tid的16进制 jstack 22769 |grep -A 20 0x590c
可以看到对应代码第几行出了问题,然后对应优化



