在使用二這編文章中提到,可以以匯總形式查看日志,也可以通過(guò)圖表來(lái)查看。Perf4j跟log4j集成后,其實(shí)也可以以圖表的形式來(lái)查看性能狀況。
我們這篇文章還是使用前一篇文章中提到log4j.xml的配置,其他都一樣,只是在配置中加入了圖表的配置:
<!-- 生成firstBlock,secondBlock的平均值的圖表 -->
<appender name="graphExecutionTimes"
class="org.perf4j.log4j.GraphingStatisticsAppender">
<!-- GraphType:Mean(平均值), Min(最小值), Max(最大值), TPS(每秒事務(wù)數(shù)) -->
<param name="GraphType" value="Mean"/>
<param name="TagNamesToGraph" value="firstBlock,secondBlock"/>
<appender-ref ref="graphsFileAppender"/>
</appender>
<!-- 生成firstBlock,secondBlock的tps的圖表 -->
<appender name="graphExecutionTPS"
class="org.perf4j.log4j.GraphingStatisticsAppender">
<param name="GraphType" value="TPS"/>
<param name="TagNamesToGraph" value="firstBlock,secondBlock"/>
<appender-ref ref="graphsFileAppender"/>
</appender>
<!-- 記錄圖表生成url的log文件 -->
<appender name="graphsFileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="/home/perfGraphs.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
另外還需要改一個(gè)地方,就是CoalescingStatistics的配置:
<appender name="CoalescingStatistics"
class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
<!--
TimeSlice配置多少時(shí)間間隔去做一次匯總寫(xiě)入文件中
默認(rèn)值是 30000 ms
-->
<param name="TimeSlice" value="10000"/>
<appender-ref ref="fileAppender"/>
<appender-ref ref="graphExecutionTimes"/>
<appender-ref ref="graphExecutionTPS"/>
</appender>
黃色那段配置的意思就是把日志寫(xiě)入到圖表日志去。
運(yùn)行代碼Perf4JAppenderExample,我們?cè)?/span>perfGraphs.log文件中生成了圖表的url:
http://chart.apis.google.com/chart?cht=lxy&chtt=Mean&chs=750x400&chxt=x,x,y&chd=t:0.0,100.0|45.2,78.1|0.0,100.0|98.1,100.0&chco=ff0000,00ff00&chm=d,ff0000,0,-1,5.0|d,00ff00,1,-1,5.0&chdl=firstBlock|secondBlock&chxr=2,0,828.6&chxl=0:|13:23:50|13:24:00|1:|Time&chxp=0,0.0,100.0|1,50&chg=50.0,10
http://chart.apis.google.com/chart?cht=lxy&chtt=TPS&chs=750x400&chxt=x,x,y&chd=t:0.0,100.0|100.0,100.0|0.0,100.0|100.0,100.0&chco=ff0000,00ff00&chm=d,ff0000,0,-1,5.0|d,00ff00,1,-1,5.0&chdl=firstBlock|secondBlock&chxr=2,0,0.5&chxl=0:|13:23:50|13:24:00|1:|Time&chxp=0,0.0,100.0|1,50&chg=50.0,10
大家可以把url放到瀏覽器訪問(wèn)下。
上面這種方式呢,需要自己登錄到服務(wù)器上,找到log文件,在放到瀏覽器中查看,總的過(guò)程還是比較麻煩。如果大家需要監(jiān)控的工程是一個(gè)web工程的話,那就更方便了,直接配置一個(gè)servlet來(lái)查看。Web.xml的配置如下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>perf4j</servlet-name>
<servlet-class>org.perf4j.log4j.servlet.GraphingServlet</servlet-class>
<!-- graphExecutionTimes和graphExecutionTPS就是我們?cè)?/span>log4j中配置的名稱 -->
<init-param>
<param-name>graphNames</param-name>
<param-value>graphExecutionTimes,graphExecutionTPS</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>perf4j</servlet-name>
<url-pattern>/perf4j</url-pattern>
</servlet-mapping>
</web-app>
大家可以打包工程,并放到web服務(wù)器下啟動(dòng),然后訪問(wèn)下/perf4j這個(gè)uri。
Maven有一個(gè)jetty插件,可以方便啟動(dòng)web工程,只要大家在pom.xml文件中加入如下配置:
<plugins>
<!-- jetty插件, 設(shè)定端口與context path-->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
</plugin>
</plugins>
在控制臺(tái)中輸入:mvn jetty:run,即可。省去了打包發(fā)布,很省心喔。
第一次用http://localhost:8080/perf4j訪問(wèn)查看圖表的時(shí)候沒(méi)有生成任何東西,那是因?yàn)閮?nèi)存中沒(méi)有收集到最新的性能數(shù)據(jù)。所以我在index.jsp里調(diào)用下以便產(chǎn)生性能數(shù)據(jù)。然后重新訪問(wèn),這個(gè)時(shí)候就有圖表生成了。