java占用cpu最高的线程堆栈信息

jstack找出占用cpu最高的线程堆栈信息

package com.example.demo;
public class Math {
    public static final int initData = 666;
    public int compute() {
        //
        int a = 1;
        int b = 2;
        int c = (a + b) * 10;
        return c;
    }
    public static void main(String[] args) {
        Math math = new Math();
        while (true) {
            math.compute();
        }
    }
}

1,使用top命令或者top -p 进程号指定显示你的java进程的内存情况,pid是你的java进程号,比如19663

image.png

2,按H,获取每个线程的内存情况

image.png

3,找到内存和cpu占用最高的线程tid,比如19664

4,转为十六进制得到 0x4cd0,此为线程id的十六进制表示

5,执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调 用方法

image.png

6,查看对应的堆栈信息找出可能存在问题的代码

猜你喜欢

转载自blog.csdn.net/robinhunan/article/details/131008542