log4j2 无垃圾模式
無垃圾記錄
垃圾收集暫停是延遲峰值的常見原因,并且對于許多系統而言,花費大量精力來控制這些暫停。
許多日志庫(包括以前版本的Log4j)在穩態日志記錄期間分配臨時對象,如日志事件對象,字符串,字符數組,字節數組等。這會對垃圾收集器造成壓力并增加GC暫停發生的頻率。
從版本2.6開始,默認情況下Log4j以“無垃圾”模式運行,其中重用對象和緩沖區,并且盡可能不分配臨時對象。還有一個“低垃圾”模式,它不是完全無垃圾,但不使用ThreadLocal字段。
Log4j 2.6中的無垃圾日志記錄部分通過重用ThreadLocal字段中的對象來實現,部分通過在將文本轉換為字節時重用緩沖區來實現。
使用Log4j 2.5:內存分配速率809 MB /秒,141個無效集合。
Log4j 2.6沒有分配臨時對象:0(零)垃圾回收。
有兩個單獨的系統屬性可用于手動控制Log4j用于避免創建臨時對象的機制:
log4j2.enableThreadlocals - 如果“true”(非Web應用程序的默認值)對象存儲在ThreadLocal字段中并重新使用,否則將為每個日志事件創建新對象。
log4j2.enableDirectEncoders - 如果將“true”(默認)日志事件轉換為文本,則將此文本轉換為字節而不創建臨時對象。注意: 由于共享緩沖區上的同步,在此模式下多線程應用程序的同步日志記錄性能可能更差。如果您的應用程序是多線程的并且日志記錄性能很重要,請考慮使用異步記錄器。
總結
以上是生活随笔為你收集整理的log4j2 无垃圾模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: log4j2 异步日志
- 下一篇: springboot 日志设计结构