分享好友 最新动态首页 最新动态分类 切换频道
【性能测试】-- 线程死锁和阻塞
2024-12-26 09:41

一、死锁定义

【性能测试】-- 线程死锁和阻塞

死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

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

 

二、死锁现象      /pinter/case/block
  出现死锁后,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"

  解决后重启tomcat恢复。

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

 

五、案例

 

接口:http://localhost:8080/PerfTeach/DeadServlet

第一次压测因为要出现线程死锁至少要2个用户,所以用3个并发,永远跑

 

使用dstat -tcdlmnsygr查看,cpu没什么压力

 

通过浏览器访问接口,没有响应

jvisualvm查看(出现红色阻塞线程

打开直接翻到最后,第8、4、7个线程出现死锁,并且会在下面把这三个线程拿出来打印

出现死锁的位置和原因

所以是线程7锁定了资源,然后线程8和4在等待线程7解锁

看一下代码:出现了嵌套锁

 二、线程阻塞 

线程阻塞问题-log4j日志级别问题
接口:http://localhost:8080/PerfTeach/Block?userId=1

30个并发永远跑,dstat监控起来:dstat -tcdlmnsygr --disk-util

从资源上看,问题不大

一般在项目中发现响应式时间长,监控一下线程

右上角Dump,多Dump几次,这里Dump3次,然后把3个快照里面的内容分别复制3个文本里面,直接ctrl+f搜BLOCKED

 

代码里面这一行在打印日志

 log4j代码里面有锁

 

解决方案

1、还是用log4j,但是把日志打印级别提高,在代码里面减少不必要的日志打印输出

2、换其他日志组件如:log4j2、logback

 

log4j.xml中设置的日志级别,程序会打印在此级别之上日志
Error、Warn、Info、debug,级别越低,日志越多

cd /home/apps/app-PerfTeach/PerfTeach/WEB-INF/classes/

vi log4j.xml

默认打印级别是debug,改为error

 还是30个并发,永远跑

 

看一下tomcat下的日志

cd /home/server/tomcat-PerfTeach01/bin/D:/

tail -f output.log

和刚才相比,TPS和响应时间都有明显的提升,由于配置比较低,这里提升不明显,真实公司里面的配置,最少提升2--3倍

从线程监控看,阻塞情况减少很多了,这个阻塞情况是因为打印error的日志

最新文章
ErphpDown v17.60(全功能版) - WordPress收费下载插件
是一款针对个人或企业站长实现知识付费的一款插件,使用他可以实现阅读收费、付费下载、付费查看等等,erphpdown会员推广下载专业版 wordpress插件(erphpdown)是模板兔开发的一款针对虚拟资源收费下载/付费下载/收费查看/付费查看/VIP下
amr格式文件用什么打开?分享amr转mp3的5种方法,包好用的!
AMR是一种音频格式,其压缩率高、文件小、便于网络传输,常用于手机、平板移动设备通话录音等场景。然而,许多播放器并不直接支持AMR文件的播放,需要转换为其他格式如MP3或WAV等。本文将介绍打开AMR文件的方式以及将AMR文件转换为MP3的5种
android rom root权限,教你刷机包获取ROOT权限的方法
教你刷机包获取ROOT权限的方法作者:enter     来源:木子安卓大家都知道安卓手机的ROOT权限,官方的ROM是不带root权限的,为的是安全问题!而现在很多机友都需要root权限,因为root权限可以做很多东西&#
iTrash for mac(Mac卸载工具) v4.0.2 官方免费版
iTrash Mac版是一款苹果系统上的免费的Mac OS应用程序卸载工具,只需要把需要卸载的程序的拖拽到iTrash Mac版窗口内就可以删除应用程序。iTrash Mac版功能介绍:1、垃圾清理iTrash特有的Levenshtein距离搜索算法,可以追溯到更长久的相关文
Apache ShenYu (incubating)插件实现原理和可观测性实践
SkyWalking和ShenYu介绍ApacheShenYu插件实现原理给gRPC插件增加泛化调用追踪并保持兼容ShenYu网关可观测性实践总结SkyWalking是一个针对微服务、分布式系统、云原生的应用性能监控(APM)和可观测性分析平台(OAP),拥有强大的功能,提供了多
24年排列5第334期[胆王鸿运]P5万位杀号原创
334期胆王鸿运体彩排列5万位杀码:368 开:333期胆王鸿运体彩排列5万位杀码:129 开:84859[万位:8]332期胆王鸿运体彩排列5万位杀码:468 开:67957[万位:6]331期胆王鸿运体彩排列5万位杀码:167 开:71227[万位:7]330期胆王鸿运体彩排列5万位杀码:
64位处理器的手机值得买?你需要64位安卓手机吗?
  64位处理器手机运行速度真的是32位处理器手机的两倍吗?  某种角度上来说可以认为64位处理器更强,32位处理器一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据,在工作频率相同的情况下,64位
2023年2023年微信小程序彻底永远卸载百科
1)注册小程序在微信公众平台/小程序申请认证,并开通微信支付,然后配置接入到您的微信小程序上。2)微信店铺配置/装修通过销客多微商城系统,你可以非常容易地选择和配置不同的主题、布局、配色等选项,使你的商铺具有优美的外观和富有吸
2024年(琅玥湾佳园)官方首页网站|琅玥湾佳园百度百科|深圳房天下
深圳·琅玥湾佳园✅琅玥湾佳园售楼处24小时电话:400-883-1335【☎已认证】✅琅玥湾佳园营销中心24小时电话:400-8950-807【☎已认证】Vip贵宾置业===欢迎来电预约尊享内部折扣===匠心钜制恭迎品鉴✅琅玥湾佳园售楼中心24小时电话:400-109-07
2020手游排行榜前十名推荐 高人气的手机游戏榜单Top10
2020排行榜前十名是怎样的?现如今在高速的发展,很多玩家对于手机游戏特别的热衷。不过在手机游戏当中,可能涉及到的游戏种类性制等等都各有不同。对于大部分玩家来说,他们在挑选游戏的时候,往往会选择自己所喜爱的游戏。既然这样,下面
相关文章
推荐文章
发表评论
0评