1.代码模拟
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
可以看到对应代码第几行出了问题,然后对应优化