Logback 异步日志输出性能影响

Logback 异步日志输出性能影响

测试

测试对比logback 同步日志输出 和异步输出的性能差异

  • 测试工具: jemeter

  • 测试环境:Linux 4核(虚拟机)

  • 测试工程: spring boot + logback

  • 测试线程 : 100

结果

同步tps 异步tps
第一次 2861.8 4695.9
第二次 3184.1 4535.1

结论

能带来性能提升,在CPU4核情况下,性能大致提升40%。

性能提升受CPU 核数、日志量等因素的影响,参考《logback日志异步化输出对性能的影响》

原因

logback 异步日志输出使用AsnycAppender. 关于AsnycAppender说明:

AsyncAppender buffers events in a BlockingQueue. A worker thread created by AsyncAppender takes events from the head of the queue, and dispatches them to the single appender attached to AsyncAppender.

其本质输出日志还是调用AppenderBase 的 doAppend方法,该方法由synchronized关键字修饰。

补充

《日志 Logback 配置文件这么写,TPS 提高 10 倍》文章案例缺少一个关键描述,异常输出日志时,logback-spring.xml 配置应该如下

    <root level="info">
        <!-- 同步输出日志-->
        <!--<appender-ref ref="CONSOLE-LOG" />-->
        <!--<appender-ref ref="INFO-LOG" />-->
        <!--<appender-ref ref="ERROR-LOG" />-->
        <!--异步输出日志-->
        <appender-ref ref="ASYNC-INFO" />
        <appender-ref ref="ASYNC-ERROR" />
    </root>

参考