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

猜你喜欢

转载自blog.csdn.net/Blueeyedboy521/article/details/124745830
今日推荐