log4j日志異步化大幅提升系統性能

jopen 11年前發布 | 23K 次閱讀 log4j 日志處理

經過大型J2EE項目實測,Log4j的日志輸出對系統性能有比較顯著的影響,尤其是日志輸入量比較大時,例如:系統并發量很大,顯示Hibernate的sql和參數日志,或日志級別較低DEBUG或INFO時等。
使用Async Logger控制日志輸出可以顯著改善系統性能。

1) 測試用例:同步文件日志輸出
測試功能:模塊管理功能,
輸出Hibernate SQL和參數,輸出到文件,配置如下:
<appender name="Hibernate_SQL" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="log/Hibernate_SQL.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd-HH" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%-5p](%C,%L) - %m%n" />
</layout>
</appender>

<category name="org.hibernate.SQL">
<priority value="TRACE" /> 
<appender-ref ref="Hibernate_SQL" />
</category>
<category name="org.hibernate.type">
<priority value="TRACE" /> 
<appender-ref ref="Hibernate_SQL" />
</category>
運用JMeter進行壓力測試,線程數50,運行4次,計算請求平均響應值(Rame-up Period: 1, 循環次數:1)

測試結果:AVG: 12565ms

2) 測試用例:異步文件日志輸出
Log4j.xml 配置修改如下:
<appender name="ASYNC_Hibernate_SQL" class="org.apache.log4j.AsyncAppender"> 
<param name="BufferSize" value="512"/> 
<appender-ref ref="Hibernate_SQL"/> 
</appender>

<category name="org.hibernate.SQL">
<priority value="TRACE" /> 
<appender-ref ref="ASYNC_Hibernate_SQL" />
</category>

<category name="org.hibernate.type">
<priority value="TRACE" /> 
<appender-ref ref="ASYNC_Hibernate_SQL" />
</category>

在BufferSize為 32, 64,128,256,512,2048時測試的請求平均耗時,及較測試用例1中的性能提高率對比如下所示:
同步,異步日志性能對比分析 (每次50并發,運行4次) 
sync 日志輸出 原時間消耗 
                      12565 
async 日志輸出 
緩沖區大小 平均耗時 性能提高率 
32                6744       46.33% 
64                8487       32.46% 
128              6899       45.09% 
256              6606       47.43% 
512              7306       41.85% 
2048            3406       72.89%

從結果可以看出,性能提高率最高 47%。最低32%。緩沖為256時性能改善最佳, 提高47%

結論:使用Log4j的J2EE應用,日志的優化對系統性能有顯著影響:
1)盡量減少不必要的日志輸出,尤其要避免 root logger上過低級別的輸出,避免在生產環境上向控制臺輸出日志。例如,下面的配置是很影響性能的,:
<root>
<priority value="DEBUG" /> 
<appender-ref ref="CONSOLE" > 
</root>
2) 使用Async logger輸出日志,buffersize在相應日志頻率下,越大越好,對于大型項目,可以選2048以上值。

地址:http://www.javaweb.cc/ide/log4j/252040.shtml

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!