1. 准备
2. linux 下运行
执行如下命令,生成 class 文件
[luozhihong@localhost java]$ javap CpuTest.java
1
执行 java 命令,运行程序
[luozhihong@localhost java]$ java CpuTest
1
3. 问题排查
执行 top 命令,查看 cpu 异常的进程
[luozhihong@localhost ~]$ top
可以看出 PID = 3221 的进程,cpu 消耗达 98.7% 以上,是由 java 命令开启的
执行 top -Hp pid,查看进程中哪个线程消耗 cpu 严重
[luozhihong@localhost ~]$ top -Hp 3221
从结果可以看出,进程中有8个线程占用 cpu 异常。这里我们找其中的一个线程分析即可
执行 printf “0x%x\n”线程PID
[luozhihong@localhost ~]$ printf "0x%x\n"3231
将线程PID转换为 16进制,为后面查找 jstack 日志做准备
执行 jstack 进程PID|vim + /16进制线程PID - ,打印线程堆栈信息
[luozhihong@localhost ~]$ jstack 3221|vim +/0x0 -
1
截取输出部分输出结果如下:
Thread-7" #15 prio=5 os_prio=0 tid=0x00007f7d6c0cb800 nid=0xca6 runnable [0x00007f7d70286000]
java.lang.Thread.State: RUNNABLE