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在进行资源的竞争,同时也输出了资源竞争代码所在行。

相关推荐
2401_867623983 分钟前
如何设置用户默认表空间_ALTER USER DEFAULT TABLESPACE
jvm·数据库·python
2301_803934618 分钟前
html标签怎样划分页面区域_section与div的区别【介绍】
jvm·数据库·python
2401_8246976622 分钟前
如何管理Oracle服务器的内核共享内存_shmmax与shmall计算
jvm·数据库·python
2301_7838486522 分钟前
mysql数据迁移过程如何降低性能影响_采用增量备份与多线程同步
jvm·数据库·python
2401_8844541526 分钟前
CSS如何快速实现网站换肤功能_利用CSS变量重置全局颜色方案
jvm·数据库·python
2301_8092445337 分钟前
PHP函数是否支持调用FPGA设备_PHP与FPGA硬件交互的实现方式【教程】
jvm·数据库·python
AI人工智能+电脑小能手39 分钟前
【大白话说Java面试题 第59题】【JVM篇】第19题:并发标记过程中会出现什么问题?
java·开发语言·jvm
兩尛43 分钟前
C++多线程编程
开发语言·jvm·c++
weixin_4440129344 分钟前
Go语言GORM怎么做分页_Go语言GORM分页查询教程【实用】
jvm·数据库·python
Devin~Y1 小时前
大厂Java面试实录:Spring Boot/Cloud + Redis + Kafka + JVM + RAG(Spring AI)三轮追问(小Y翻车版)
java·jvm·spring boot·redis·spring cloud·kafka·mybatis