AsyncFileAppender导致业务线程卡顿的问题

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 规范日志打印

猜你喜欢

转载自curious.iteye.com/blog/2309818