JVM常见死锁问题产生原因和多种诊断方式

上一篇 << 下一篇 >>>服务器CPU飙升为100%问题排查及如何避免


产生原因

互相等待对方的锁释放

new Thread(() -> {
    synchronized (Integer.class) {
        try {
            TimeUnit.SECONDS.sleep(1);
            synchronized (String.class) {
                System.out.println("执行成功");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}).start();
synchronized (String.class) {
    try {
        TimeUnit.SECONDS.sleep(1);
        synchronized (Integer.class) {
            System.out.println("执行成功");
        }
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

问题定位

方法一、导出栈信息后定位

a、使用jps查看所有的java pid
b、jstack pid >aaa.log--------------将pid的栈信息输出到当前目录的aaa.log
搜索deadlock,找到对应锁信息,以及等待的锁信息


JVM常见死锁问题产生原因和多种诊断方式_第1张图片

方法二、使用JDK自带的jvisualvm工具直接检测

JVM常见死锁问题产生原因和多种诊断方式_第2张图片

JVM常见死锁问题产生原因和多种诊断方式_第3张图片

方法三、使用JDK自带的jconsole工具直接检测

JVM常见死锁问题产生原因和多种诊断方式_第4张图片

相关文章链接:
<< << << << <<<自定义SPI和热部署技术破坏类加载器的双亲委派模式
<< << << <<<服务器CPU飙升为100%问题排查及如何避免
<< << << << << << << <<<一张图看懂CMS垃圾回收器的底层原理
<< << << << << <<

你可能感兴趣的:(JVM常见死锁问题产生原因和多种诊断方式)