Log4j2同步異步性能比較以及教程和問題(坑)匯總


線程數:500個   每個線程日志輸出次數: 500次 

log4j2其實有兩個輸出異步日志的方式:AsyncLogger和AsyncAppend

他兩的區別在於:

AsyncLogger使用的是無鎖高性能隊列disruptor,底層是依賴數組實現的RingBuffer和CAS改變下標實現,並且不會出現偽共享緩存,關於disruptor的詳情可以看下面這篇

https://ifeve.com/disruptor/     此網站貌似有點不穩定:)

AsyncAppend使用的則是ArrayBlockingQueue,底層還是依賴於ReetrantLock保證生產消費的一致性,而因為涉及到掛起和喚醒線程,所以線程上下文切換的開銷就不多說了

PS:下面所有測試均基於AsyncLogger

 

XML文件

 

全異步和全同步以及混合異步的性能比較

※全異步:

 
※全同步:

性能直接差了一個數量級,10倍的差距


※混合異步

從對比中我們可以看到全異步的性能是最高的,但是在我們真實生產環境中卻不能使用全異步,原因除了在有些時候,我們服務器down掉時可能會丟失部分重要日志信息外,還有可能會出現下面這個博客所描述的問題

https://blog.csdn.net/henrydlwang/article/details/78939031

當然,除了這個問題外,還有一個別人踩過的坑也在這里分享一下

https://juejin.im/post/5b7d5b34518825430810be8e

 

最后,則是log4j2的一些使用方法和配置信息

關於log4j2的配置的詳細解釋

https://www.cnblogs.com/yudar/p/5113655.html

log4j2進階使用
https://blog.csdn.net/u011054333/article/details/54412360

 

loog4j2如何配置全異步

loog4j2如何配置混合異步


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM