性能测试之:一次线程不安全导致的死循环

  性能测试场景:
  发送3条HTTP请求给服务器,服务器响应请求有2条是同步响应,有1条是异步响应。3个请求分别为3个事务。
   测试过程中的现象:
  1、第一个场景做性能测试时,场景运行为15分钟,运行正常,各项指标也正常。做了3次同场景测试之后,确定性能测试通过。
  2、第二个场景做疲劳测试,场景运行半个小时之后,服务器CPU突然升高到100%,load average持续很高。而且在压力停止之后很长一段时间,CPU利用率仍然100%,load average仍然很高。
   分析问题,解决:
  1、分析问题:
  通过上述现象,使用VisualVM工具,查看线程dump,发现里面有大量线程block。但是通过线程无法具体定位到那段代码。
  为了精确定位引起线程block的代码,将3条Http请求进行分解,并分别测试,发现是第2条http请求引起的线程block。就下来的事情相对测试就简单了,主要是我们的开发人员进行代码分析,如果导致线程block了。
   2、最终定位问题和解决:
  开发同事定位问题:HashMap 对象不是线程安全的,在并发调用的时候容易造成程序死循环。从而导致CPU100%,且压力停止之后,CPU仍然100%,也非常符合上述场景测试结果。
  解决方案:
  (1)、HashMap不是线程安全的。
  (2)、在并发的场合需要使用ConcurrentHashMap对象(读多写少)。   


最新内容请见作者的GitHub页:http://qaseven.github.io/
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值