log4j2效能提公升點

2021-08-28 20:17:48 字數 935 閱讀 3279

1、log4j1寫日誌多執行緒情況是阻塞的,log4j2不會阻塞,生產者只負責生產,通過無鎖佇列ringbuffer的無阻塞記憶體佇列作為緩衝(即使用disruptor),多生產者多執行緒的競爭是通過cas實現,效能較高,至於最後落地,雖然兩者都會呼叫synchronized方法寫入日誌,log4j2的asynclogger支援多個消費者,每個消費者取一批待處理的日誌,類似於分段,用於提高效能

2、disruptor簡介:

log4j2之所以能在非同步寫日誌時效能提高這麼多,離不開優秀的mq元件disruptor。

disruptor的主要設計思想是無鎖的高併發,在設計上採用記憶體屏障的機制和cas操作實現此思想。主流的併發程式 

都離不開鎖對資源的管控,或者盡量避開鎖的使用。  

理解為以下三點:

2、1有乙個基於陣列的迴圈資料結構(環裝緩衝區)。這個迴圈資料結構,它是個擁有多個可用元素引用的陣列。預先分配了物件記憶體空間。生產者與消費者通過這個迴圈資料結構進行讀寫操作,並不會有鎖或資源競爭。

2、2在disruptor中,採用消費者-生產者模型進行讀寫的分離,所有事件(events)以組播的方式被發布給所有消費者,以便下游佇列通過並行的方式進行消費。因為消費者的並行消費,需要協調消費者間的依賴關係。

2、3生產者和消費者中有個序列計數器,指示緩衝區中當前正在被它所處理的元素。所有生產者或消費者都只可以修改它自己的序列計數器,但同時可以讀取其他的序列計數器,記憶體屏障加序列號的方式實現了無鎖的併發機制。

或部落格專家  小程故事多_80的博文 ,標題為《 log4j2的效能為什麼這麼好?》

2、   log4j2效能剖析(多消費者):

3、[翻譯]高併發框架 lmax disruptor 介紹

原文:4、log4j 公升級log4j 2 後的效能對於tps的提公升效果和log4j 效能慢的原因:

收集未看)

5、disruptor 極速體驗demo:

log4j2 提公升系統效能

其中,log4j log4j2 logback commons logging都是日誌的具體實現包。其中,slf4j是乙個門面,乙個介面卡,所有的日誌 都可以用slf4j來寫,它會根據專案具體依賴的日誌實現包進行日誌操作。通過slf4j寫日誌的好處是,當更換日誌的實現方案時,無需修改日誌 只需修改p...

log4j2效能優化

背景 最近在做log4j公升級到log4j2的專案,在測試公升級之後的效能時,被驚了一下,效能沒有提公升,反而下降了,趕緊研究了一下log4j2的相關配置,以下是研究結果。1.2.不要使用location相關屬性,例如 c or class,f or file,l or location,l or ...

log4j2 使用詳解

1.log4j2的匯入 2.測試用例 log4j 2.0的使用非常簡單,只要用logmanager的getlogger函式獲取乙個logger,就可以使用logger記錄日誌,如下 import org.apache.logging.log4j.logmanager import org.apach...