引言
在招聘面试过程中,时不时会遇到“CPU100%异常警告,如何定位问题所在?”的面试问题。接下来给出简单的问题排查过程,以后再给出详细的排查过程。
- 查找消耗CPU最高的进程PID
- 根据PID查找消耗CPU最高的线程号TID
- 根据线程号TID找到对应的Java线程,进行处理。
实际问题
在Intellij IDEA中运行一段死循环程序,如下
public class Main {
public static void main(String[] args) {
int random = 0;
while(random<100){
random = random*10;
}
}
}
此时,打开任务管理器可以发现CPU飙升。
问题排查过程
查找消耗CPU最厉害的进程PID
在任务管理器中显示PID栏,然后找到消耗CPU最多的进程,从图中可以发现是PID=11156
。
根据PID查找出消耗CPU最高的线程TID
这里用到微软的工具Process Explorer,点击超链接可直达下载地址。
如图查找到线程号TID=17152
,然后用十六进制表示为0x4300
根据线程号查出对应的java线程,进行处理
在windows系统的cmd窗口中输入以下命令,打印进程的相关信息。
jstack -l 11156 > g:/11156.stack
打开g:/11156.stack
文件,查找十六进制表示的线程号0x4300
,如下图
根据文件就可以看出,Main.java文件中第20行一直在跑,至此定位到问题。