AsyncFileAppender导致业务线程卡顿的问题
Appender负责日志的输出
----------------------------
配置文件
<appender name ="ASYNC_FILE" class= "ch.qos.logback.classic.AsyncAppender"> <discardingThreshold >0</discardingThreshold> <queueSize>512</queueSize> <appender-ref ref ="FILE"/> </appender> <appender name ="ASYNC_ACCESS" class= "ch.qos.logback.classic.AsyncAppender"> <discardingThreshold >0</discardingThreshold> <queueSize>512</queueSize> <appender-ref ref ="ACCESS"/> </appender>
-------------------
threadDump
-----------------------
引发卡顿的原因:
1 asyncAppender配置和实现
a 不丢弃日志消息
b 队列太短
c worker线程只有一个, 消费效率低
2 需要打日志的业务线程太多,而队列已满且不丢消息,造成业务线程等待,恢复执行,等待,恢复执行,出现了卡顿现象
==============================
解决办法:
1 适当提升队列的长度,提升性能
2 允许丢消息
3 自定义AsyncAppender,增加消费者线程,但是带来的缺点是日志消息打印的有序性会被破坏
4 减少最大线程数,避免如此多的(6K+)的线程因为队列满而等待
5 规范日志打印,级别,是否真的需要打印日志
=========
最终采用的办法
1 提升长度
2 减少最大线程数
3 规范日志打印