下面我写一个死循环的代码,然后演示一遍如何去定位问题
/**
* 这个案例为了演示cpu很高时候 如何快速定位
*/
public class CpuTest {
public static void main (String[] args) throws InterruptedException {
while (true) {
System.out.println(new Random().nextInt(1010101010));
}
}
}
为了节省时间 我没有等他运行很久就去截图了,所以可能那些性能指标不是很离谱哈,只要是提供定位思路哈
第一步、用top命令找出占cpu占比最高的 记录下PID
采用 jps 进一步定位
找到当前正在运行的进程号
定位到具体的线程或代码 ps -mp 进程 -o THREAD,tid,time
- -m 显示所有的线程
- -p pid进程使用cpu的时间
- -o 该参数后是用户自定义的格式
定位到了具体的线程
将需要的线程ID转换为16进制格式(英文小写格式)
jstack 进程号 | grep tid 线程号(16进制) -A60
下面就能找到错误的代码