JVM优化之使用Jstack命令查找JVM死锁

JVM优化之使用Jstack命令查找JVM死锁

示例代码

java 复制代码
public class DeadLockDemo {

    private static Object lock1 = new Object();
    private static Object lock2 = new Object();

    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (lock1) {
                try {
                    System.out.println("thread1 begin");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }
                synchronized (lock2) {
                    System.out.println("thread1 end");
                }
            }
        }).start();

        new Thread(() -> {
            synchronized (lock2) {
                try {
                    System.out.println("thread2 begin");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }
                synchronized (lock1) {
                    System.out.println("thread2 end");
                }
            }
        }).start();
    }
}

使用下面的命令输出线程信息

java 复制代码
jstack <pid>

"Thread-1" 线程名

prio=5 优先级=5

tid=0x0000028ae51d6000 线程id

nid=0x8778 线程对应的本地线程标识nid

java.lang.Thread.State: BLOCKED 线程状态

通过输出结果,可以看到有一个线程死锁,Thread-0和Thread-1在进行资源的竞争,同时也输出了资源竞争代码所在行。

相关推荐
Derek_Smart5 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
大道至简Edward6 天前
深入 JVM 核心:一文读懂 Class 文件结构(附 Hex 实战解析)
jvm
weisian1519 天前
JVM--20-面试题6:如何判断对象可以被垃圾回收?
jvm·可达性算法
蚊子码农9 天前
每日一题--JVM线程分析与死锁排查
jvm
xuxie999 天前
NEXT 1 进程2
java·开发语言·jvm
weisian1519 天前
JVM--19-面试题5:说说JVM的类加载机制和双亲委派模型
jvm·双亲委派模型·jvm类加载机制
亓才孓9 天前
【反射机制】
java·javascript·jvm
Volunteer Technology9 天前
JVM之性能优化
jvm·python·性能优化
Andy Dennis9 天前
Java语法注意事项
java·开发语言·jvm
坚持的小马10 天前
JVM相关笔记-jps
jvm·笔记