简介
如果碰到服务器CPU使用率飙升,居高不下,该如何定位排查问题呢?
本文带大家实践一下,在使用Java时,碰到服务器CPU飙升该如何定位到具体的问题代码!
准备工作
1、代码准备
Main.java
代码语言:javascript复制public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
circle();
}
public static void circle() {
while (true) {
}
}
}
这里写一个circle方法,方法里面是一个while死循环。
2、在服务器上编译运行代码
代码语言:javascript复制javac Main.java
java Main
查看CPU占用进程
代码语言:javascript复制top
找到异常的进程号
定位异常线程
通过命令
代码语言:javascript复制top -Hp <pid>
定位异常线程
线程号转为16进制
代码语言:javascript复制printf %x <tid>
jstack定位异常代码
代码语言:javascript复制jstack <pid> |grep -A 200 <16进制tid>
根据类名和行号,即可定位到问题代码