利用jvisualvm监控分析死锁线程并定位死锁的对象

一:建立模拟的死锁代码

 

:进入java的bin目录打开jvisualvm.exe

2.1:点击[线程dump]后,有死锁的情况会看到以下三处关键的信息

标记1:代表 发生死锁的所在类

标记2:代表锁住的对象的内存地址,如:0x00000000f0623a48(这个比较重要,可以用来定位死锁的原因)

标记3:代表整个程序中有几处死锁

三:使用oql对象查询语句分被死锁对象的所在代码

1:Windows下进入java的bin目录(备注:liunx下与windows大致相同,使用shell命令即可)

2:使用jps查看进程(jvisualvm工具已经为我们展示了对应程序的id,此步可忽略)

3:使用命令  jmap -dump:live,file=test.map 7628 生成分析文件

4:启用jhat,使用如下命令,其中 test.map是 jmap生成的文件,当jhat命令执行完成后,打开浏览器

5:进入浏览器输入 http://localhost:7000/

 

6:然后点击标红的链接,进入如下界面

7:然后在输入框输oql语句:如  select heap.findObject("0x00000000f0623a48")

0x00000000f0623a48 这个地址则是我们在线程中看到死锁对象的内存id,

然后点击查询结果可以看到下图

7:对比java代码

8:经对比确实是 DeadLockDemoB变量被线程锁住,然后将其修改即可

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值