JVM线程运行诊断

情况1 CPU占用过多

使用 jstack 命令

如以下代码:

 /**
  * 测试类
  *
  */
public class A {
    public static void main(String[] args) throws InterruptedException {
        while (true){
            //Thread.sleep(100);
            System.out.println(1);
        }
    }
}

某个线程陷入死循环,一直占用着CPU在工作

1 让这段代码跑起来


2 使用top命令查看进程与cpu占用情况

3 可以看到占用CPU将近一半
使用命令ps H -eo pid,tid,%cpu | grep 进程号根据进程号查看其具体线程,找到cpu占用率高的线程

4 使用命令jstack 线程ID查看线程具体情况

找到我们自己的线程,可以看到下边写着locked at 9,也就是我们打印1那行,因为是死循环,所以这行一直执行,使用jstack命令我们找到了问题所在

posted @ 2023-03-15 13:13  程长新  阅读(40)  评论(0编辑  收藏  举报