性能测试中Disruptor框架ExceptionHandler使用分享
在使用Disruptor
设计新的性能测试模型的过程中,在使用过程中,偶然发现会有一些异常,然后QPS就会不断下降,直到最后QPS能力降为零。经过查询相关资料后发现了一个小坑:com.lmax.disruptor.ExceptionHandler
。
这个接口实现类是处理消费消息的过程中发生的异常,具体的源码位置在com.lmax.disruptor.WorkProcessor#run
,有兴趣的可以看看。下面分享一下部分代码:
catch (final Throwable ex)
{
// handle, mark as processed, unless the exception handler threw an exception
exceptionHandler.handleEventException(ex, nextSequence, event);
processedSequence = true;
}
如果大家在使用Disruptor
使用默认的方法的话,会使用默认的ExceptionHandler
的实现类com.lmax.disruptor.FatalExceptionHandler
,它的com.lmax.disruptor.FatalExceptionHandler#handleEventException
方法如下:
@Override
public void handleEventException(final Throwable ex, final long sequence, final Object event)
{
logger.log(Level.SEVERE, "Exception processing: " + sequence + " " + event, ex);
throw new RuntimeException(ex);
}
最后还是会抛出一个异常,然后造成com.lmax.disruptor.WorkProcessor
执行失败,如果消费消息异常比较多的话,基本上消费线程会很快被干掉,最终导致没有消费线程。
回到实际场景,使用消费线程进行并发请求,在之前的实现中都是直接抛出异常,导致BUG的出现。修复的方法也很简单,要不使用Disruptor
提供的几种com.lmax.disruptor.IgnoreExceptionHandler
或者org.apache.logging.log4j.core.async.AsyncLoggerDefaultExceptionHandler
之类的,基本都是日志打印。不过还是喜欢自己实现,这样方便一些,所以下面是我的解决方案。
try{
dosomething()
catth(e){
}
因为随着QPS上升,报错的概率还是挺大的,毕竟是日志流量回放,由于流量文件中部分请求直接回放是会失败的。如果打印日志,即使每秒万分之一的概率,每秒错误QPS就得10+的QPS。不如直接使用专用的日志平台去统计这部分的异常日志。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
最后基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源在下方公众号免费获取~
相关文章
- 双路 E5-2650v2 性能测试
- 测试18
- 专项测试--性能分析三
- 自动化冒烟测试:Unittest vs Pytest框架
- 用Hardhat和Ethers引入并测试知名NFT智能合约
- 性能测试技术笔记(一):如何快速上手压测工作
- Redis API——List功能实践与性能测试【Go版】
- 性能测试|JMeter压测结果分析
- 性能测试|JMeter逻辑控制器(九)
- Scout:一款功能强大的轻量级URL模糊测试与爬取工具
- Jmeter下载安装及性能测试使用详解程序员
- Shell脚本 | 性能测试之内存详解程序员
- Linux下测试网络性能的方法(linux如何测试网络)
- 测试MySQL数据库极限性能测试(mysql数据库极限)
- 测试Linux系统渗透测试:确保系统安全(linux渗透)
- 测试显示苹果的Swift语言性能不佳,任重而道远!
- 研究人员让幼龟在小型跑步机上爬行 以测试它们的体力
- Linux系统下网络性能测试实践(linux测试网络性能)
- Redis的通讯性能——测试小结(redis通讯)
- uiLinux下安装soapUI实现API测试(linux安装soap)
- Linxu AB 命令:测试服务器性能的利器(linux ab 命令)
- Redis集群测试报错却无改善(redis集群测试报错)
- oracle使用递归的性能提示测试对比