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>