首页 > 其他 > 详细

性能测试学习第十天-----性能案例分析之死锁

时间:2019-09-28 16:43:19      阅读:123      评论:0      收藏:0      [点我收藏+]

一、定义
  线程死锁就是有两个线程,一个线程锁住了资源A,又想去锁定资源B,另外一个线程锁定了资源B,又想去锁定资源A,两个线程都想去得到对方的资源,而又不愿释放自己的资源,从而造成一种互相等待,无法执行的情况。

二、现象
  出现死锁后,tps降为0,压力测试工具无法得到服务器的响应,服务器硬件资源空闲,通过jvisualvm去查看线程情况,至少两个线程一直处于红色的阻塞状态。
  死锁经常表现为程序的停顿,或者不再响应用户的请求。从操作系统上观察,对应进程的CPU占用率为零。

三、定位方法
  通过jvisualvm或者jstack,进行线程dump,对线程状态进行分析,获取到哪行代码导致的死锁,如:
    Found one Java-level deadlock:
    http-bio-8080"-exec-162":
    waiting to lock monitor 0x0818abac (object 0x84b40ad0, a com.lee.domain.Order),
    which is held by ""http-bio-8080"-exec-158"
    ""http-bio-8080"-exec-158":
    waiting to lock monitor 0x08188cd0 (object 0x84b3bc48, a com.lee.domain.Order),
    which is held by ""http-bio-8080"-exec-162"

四、解决思路
  ? 避免嵌套加锁
  ? 减小锁粒度

性能测试学习第十天-----性能案例分析之死锁

原文:https://www.cnblogs.com/qingyuu/p/11603619.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!