日志量突增导致线上出现大面积的超时,机器cpu负载过高
本文主要记录了一次使用 log4j日志系统,在增加日志的输出量后,导致机器出现超时,机器cpu负载过高的问题定位与解决方法。
[[TOC]]
现象描述
一台机器不同端口,两个相同的进程,出现机器负载过高,dump发现log4j callApender阻塞
问题分析
线上未进行相关的变更,与之前相比,仅仅是日志量增加了,根据这个点,进一步排查
发现log4j的appender是一个队列,队列的大小默认是512,当队列满了之后,会阻塞,直到队列有空闲位置
1 | public void callAppenders(LoggingEvent event) { |
解决方案:升级至log4j2解决了相关的问题
但是发现,还是会存在死锁问题,通过分析发现log4j2-disruptor队列有问题,导致阻塞。
解决方案:升级log4j2的版本