解决多线程性能问题技巧分享
最近工作中在使用多线程处理业务逻辑时遇到了问题,程序运行期初,与之前未使用多线程没有任何差别,但是当对应的线程处理队列开始拥堵时,处理速度开始愈来愈慢,为解决该性能问题,投入多日并作出如下总结
问题定位
业务方法耗时跟踪
判定原因:某方法耗时较长,拖垮整个业务流程,导致性能下降
验证过程:在整个业务流程的主方法中加入方法耗时日志,发现所有方法耗时整体偏慢,且耗时颇长的方法并不唯一,存在随机性(正常方法耗时在3ms左右,异常时方法耗时平均90ms,更有甚者耗时上百上千毫秒)
同步日志输出
判定原因:同步日志输出拖慢系统整体性能
验证过程:针对日志输出方式,分别对同步和异步日志进行两次压测,但是效果虽有改善但是整体影响不大,整体还是偏慢,该原因并不是导致系统问题的主要原因,压测数据如下
日志输出方式 | 速率(5min) | 速率(10min) | 速率(15min) | 速率(20min) | 速率(25min) | 速率(30min) |
---|---|---|---|---|---|---|
同步 | 34972 | 9628 | 11485 | 15927 | 1758 | ~ |
异步 |