log4j的性能瓶頸定位與性能優化(org.apache.log4j.spi.RootLogger) (轉)


 

最近執行一個項目調優,發現使用第三方的Json庫導致性能差。原以為問題就這么定位到了,結果去掉Json操作后,性能也不見好轉。

    現象非常詭異:CPU、內存、網絡、磁盤使用率均有剩余,而且壓力也是足夠的。即使施加更大壓力,吞吐量也不見好轉。

    於是監控了一下Java進程狀態,發現幾乎所有進程都處在

狀態:BLOCKED 在 org.apache.log4j.spi.RootLogger@6b2b48e5 上,擁有者: http-0.0.0.0-8080-2010

阻塞總數:188,661 等待總數: 2,699

堆棧追蹤: 
org.apache.log4j.Category.callAppenders(Unknown Source)
org.apache.log4j.Category.forcedLog(Unknown Source)
org.apache.log4j.Category.log(Unknown Source)
org.apache.commons.logging.impl.Log4JLogger.debug(Log4JLogger.java:110)

……

    寫日志這么影響性能?初步懷疑代碼或配置問題。請教了一下使用log4j的類似項目的朋友,確定是配置問題:未給log4j配置寫緩沖。

    修改log4j配置文件 /usr/local/jboss/server/default/deploy/higkoo.war/WEB-INF/log4j.xml ,紅色部分為添加緩沖的配置項:

<appender name="MyLog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/data/logs/higkoo/MyLog.log" />
<param name="encoding" value="UTF-8" />
<param name="DatePattern" value="'.'yyyy.MM.dd" />
<param name="Append" value="true" /> <param name="BufferSize" value="8192" /> <param name="ImmediateFlush" value="false" /> <param name="BufferedIO" value="true" />
<layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss,SSS} %m [%c]%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
         <param name="levelMin" value="debug" />
         <param name="levelMax" value="debug" />
         <param name="AcceptOnMatch" value="true" />
</filter>
</appender>

OK,添加緩沖后,阻塞現象立馬消失。性能達到最佳,CPU全部耗盡。



http://blog.csdn.net/wlsyn/article/details/7768725
http://xq0804200134.iteye.com/blog/1666086





免責聲明!

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



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