CPU过高诊断,排查

133 阅读1分钟

1:代码准备

死循环打印随机数

public class TestCPUHigh {

    public static void main(String[] args) {

        while (true){
            System.out.println(new java.util.Random().nextInt(66669999));
        }
    }
}

2:现象

pid = 5783的进程占用很高

top1

3:诊断

3.1:top
3.2:定位到进程 jps

jps

3.3:定位到代码

具体的线程 pid 5783

ps -mp 5783-o THREAD,tid,time

t

3.4:进制转换

线程id换成 16进制 (字母小写,如果有字母的话)图中线程占用时间较长的是 TID=5784 转换成16进制 1698

3.5:jstack定位

jstack 5783 | grep 1698 -A60

查看堆栈信息 60行

ay

3.6:找熟悉的类

找到从自己项目里面出来的类 找到TestCPUHigh.java的第6行,诊断完毕