怎么排查死锁?

产生死锁需要满足以下 4 个条件

  1. 互斥条件:指运算单元(进程、线程或协程)对所分配到的资源具有排它性,也就是说在一段时间内某个锁资源只能被一个运算单元所占用。
  2. 请求和保持条件:指运算单元已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它运算单元占有,此时请求运算单元阻塞,但又对自己已获得的其它资源保持不放。
  3. 不可剥夺条件:指运算单元已获得的资源,在未使用完之前,不能被剥夺。
  4. 环路等待条件:指在发生死锁时,必然存在运算单元和资源的环形链,即运算单元正在等待另一个运算单元占用的资源,而对方又在等待自己占用的资源,从而造成环路等待的情况。
图片[1]-怎么排查死锁?-编程社

只有以上 4 个条件同时满足,才会造成死锁问题。

排查死锁的方式:

  • 使用 jsp 可以查看正在运行的 java 进程,找到发生死锁的进程 id 号
  • 根据进程 id 号,适用 jstack 查看进程的堆栈信息,从中可以找到死锁在代码中出现的位置。
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称

    暂无评论内容