log4j高并发下写日志出现性能瓶颈问题
一大早就收到了报警,一个活动订单接口报查询慢

可以看到中间突然开始慢下来,方法很简单,就是订单表单表查个数据然后返回,索引也正常,查看慢日志的链路信息

发现耗时主要在日志上 查看打印日志的代码

可以看到打印日志的地方有加锁,并会锁住当前日志打印类,(如果additive为true的话,则会一直找链路的parent,处于根部的parent竞争肯定最为激烈),在高并发的情况下,使用同步锁的方式很大概率会产生性能问题,如果磁盘性能不足或者因为其他原因产生了随机写导致性能降低,写入时间增加则请求会被大面积阻塞。
解决方案:目前应急方案先重启服务实例解决(重启大法好),后续引入log4j2的异步写入解决高并发下日志写入的问题
贴一个某项目某接口日志改为异步后的耗时变化


浙公网安备 33010602011771号