检测java死锁的几种方式

死锁检测

代码:

public class DeadLock {


    public static void main(String[] args) {
        Object a = new Object();
        Object b = new Object();


        new Thread(() -> {
            while (true) {
                synchronized (a) {
                    synchronized (b) {
                        System.out.println("线程A");
                    }
                }
            }




        }).start();


        new Thread(() -> {
            while (true) {
                synchronized (b) {
                    synchronized (a) {
                        System.out.println("线程B");
                    }
                }
            }


        }).start();
    }
}

1.通过jConsole检测死锁

通过jConsole连接上进程后,点击线程,会看到检测死锁按钮。

 

死锁界面会显示只有锁的线程,还有持有锁的位置

 

2.通过jvisualvm检测死锁

 

点击线程Dump后,会有死锁线程的提示。也可以将线程Dump信息复制出来,通过一些第三方工具进行分析,比如:fastthread

 

然而生产环境,是不允许我们在本地使用可视化工具进行连接的。

3.通过arthas检测

通过命令:thread -b

 

4.通过jdk的工具:jstack命令

stack -l 54726

也可以通过

jstack -l 54726 >> /data/logs/stack.txt

将线程堆栈信息存入本地文件,便于分析

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值