jvm虚拟机性能调优实战-第一章-java项目内存死锁检测与诊断

一、场景

在这里插入图片描述

启动两个线程,线程T1先对资源R1加锁,然后立马对资源R2申请加锁;线程T2先对资源R2加锁,然后立马对资源R1申请加锁。此时线程T1因为T2已经对资源R2加锁,所以一直等待释放R2;T2则一直等待T1释放R1,造成相互等待对方释放锁资源而造成的死锁。

二、案例代码

1、线程T1

在这里插入图片描述

2、线程T2

在这里插入图片描述

三、检测诊断

1、查询java进程

jps -l

2、查看线程栈信息,并导出

# 查看
jstack 7281
# 导出到文件
jstack 7281 > /tmp/7281.bin

7281为进程号

3、打开线程栈信息,查找死锁标识

可以搜索自己的包名,也可以搜索deadlock
在这里插入图片描述

可以明显看到死锁发生在DeadLockController.java的84行和58行代码处

特别感谢参考:https://www.ixigua.com/6842644783408611851?id=6842502368282542596&logTag=0d2f7511c602bc4f1005

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值