jstack命令定位死锁

同样的,写一个死锁代码片段,发布到虚拟机,访问引起死锁的接口。
排查步骤:

  1. 使用top或者jps定位到项目进程pid;
[root@localhost webapps]# jps
6944 springboot.jar
7124 Jps
  1. 获取进程pid后直接使用命令:jstack -l 6944,打印线程dump,然后全文搜索deadlock
Found one Java-level deadlock:
=============================
"Thread-8":
  waiting to lock monitor 0x00007f9814003be8 (object 0x00000000eabde030, a java.lang.String),
  which is held by "Thread-7"
"Thread-7":
  waiting to lock monitor 0x00007f9830005458 (object 0x00000000eab2fcc8, a java.lang.String),
  which is held by "Thread-8"

Java stack information for the threads listed above:
===================================================
"Thread-8":
        at com.daling.util.DeadLock.lambda$deadLock$1(DeadLock.java:36)
        - waiting to lock <0x00000000eabde030> (a java.lang.String)
        - locked <0x00000000eab2fcc8> (a java.lang.String)
        at com.daling.util.DeadLock$$Lambda$514/1061093170.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:745)
"Thread-7":
        at com.daling.util.DeadLock.lambda$deadLock$0(DeadLock.java:23)
        - waiting to lock <0x00000000eab2fcc8> (a java.lang.String)
        - locked <0x00000000eabde030> (a java.lang.String)
        at com.daling.util.DeadLock$$Lambda$513/204515734.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:745)

Found 1 deadlock.

查看上面的dump日志,Thread-8持有0x00000000eab2fcc8锁,等待0x00000000eabde030;Thread-7持有0x00000000eabde030,等待0x00000000eab2fcc8;所以Thread-8和Thread-7发生死锁。最右一行:Found 1 deadlock.

线程dump 文件里,值得关注的线程状态有

死锁, Deadlock(重点关注)

执行中,Runnable

等待资源, Waiting on condition(重点关注)

等待获取监视器, Waiting on monitor entry(重点关注)

暂停,Suspended

对象等待中,Object.wait() 或 TIMED_WAITING

阻塞, Blocked(重点关注)

停止,Parked

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值