2012年4月16日

          perf4j使用四(log4j集成圖表查看)

           

          在使用二這編文章中提到,可以以匯總形式查看日志,也可以通過圖表來查看。Perf4jlog4j集成后,其實也可以以圖表的形式來查看性能狀況。

           

          我們這篇文章還是使用前一篇文章中提到log4j.xml的配置,其他都一樣,只是在配置中加入了圖表的配置:

          <!-- 生成firstBlock,secondBlock的平均值的圖表 -->

              <appender name="graphExecutionTimes"

                        class="org.perf4j.log4j.GraphingStatisticsAppender">

                  <!-- GraphType:Mean(平均值), Min(最小值), Max(最大值), TPS(每秒事務數) -->

                  <param name="GraphType" value="Mean"/>

                  <param name="TagNamesToGraph" value="firstBlock,secondBlock"/>

                  <appender-ref ref="graphsFileAppender"/>

              </appender>

           

              <!-- 生成firstBlock,secondBlocktps的圖表 -->

              <appender name="graphExecutionTPS"

                        class="org.perf4j.log4j.GraphingStatisticsAppender">

                  <param name="GraphType" value="TPS"/>

                  <param name="TagNamesToGraph" value="firstBlock,secondBlock"/>

                  <appender-ref ref="graphsFileAppender"/>

              </appender>

             

              <!-- 記錄圖表生成urllog文件 -->

              <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>

          另外還需要改一個地方,就是CoalescingStatistics的配置:

          <appender name="CoalescingStatistics"

                        class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">

                  <!--

                       TimeSlice配置多少時間間隔去做一次匯總寫入文件中

                       默認值是 30000 ms

                  -->

                  <param name="TimeSlice" value="10000"/>

                  <appender-ref ref="fileAppender"/>

                 

                  <appender-ref ref="graphExecutionTimes"/>

                  <appender-ref ref="graphExecutionTPS"/>

              </appender>

          黃色那段配置的意思就是把日志寫入到圖表日志去。

          運行代碼Perf4JAppenderExample,我們在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放到瀏覽器訪問下。

           

          上面這種方式呢,需要自己登錄到服務器上,找到log文件,在放到瀏覽器中查看,總的過程還是比較麻煩。如果大家需要監控的工程是一個web工程的話,那就更方便了,直接配置一個servlet來查看。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>

                 <!-- graphExecutionTimesgraphExecutionTPS就是我們在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服務器下啟動,然后訪問下/perf4j這個uri

          Maven有一個jetty插件,可以方便啟動web工程,只要大家在pom.xml文件中加入如下配置:

          <plugins>

                     <!-- jetty插件, 設定端口與context path-->

                     <plugin>

                        <groupId>org.mortbay.jetty</groupId>

                        <artifactId>jetty-maven-plugin</artifactId>

                     </plugin>    

          </plugins>

          在控制臺中輸入:mvn jetty:run,即可。省去了打包發布,很省心喔。

          第一次用http://localhost:8080/perf4j訪問查看圖表的時候沒有生成任何東西,那是因為內存中沒有收集到最新的性能數據。所以我在index.jsp里調用下以便產生性能數據。然后重新訪問,這個時候就有圖表生成了。


          下載工程

          posted @ 2012-04-19 14:12 yangpingyu 閱讀(1747) | 評論 (1)編輯 收藏

          perf4j使用三(log4j集成)

          Perf4j最主要的一個好處就是可以跟log4j或者logback來性能分析和監控線上運行的程序。集成的方式主要是:自定義log4j的appenders通過標準的配置加入到log4j中去(后面會有配置的例子)。有一個要注意的地方就是需要使用log4j的1.2.14版本或者更高版本。由于我一般都是使用log4j,所以對于logback的集成我就不描述了,我覺得應該差不多的。

           

          Perf4j最重要的appender就是AsyncCoalescingStatisticsAppender,它會把一段時間內StopWatch的信息匯總到一個獨立的GroupedTimingStatistics日志信息,然后把這個獨立的信息傳給下游的appenders,比如fileappenders,這樣就可以寫到文件中去了。也可以傳給per4j的其他自定義appenders。

           

          接下來我們看一個log4j.xml的例子,有一個限制,如果要使用AsyncCoalescingStatisticsAppender就只能使用xml文件而不能使用properties文件。

           

          <?xml version="1.0" encoding="UTF-8" ?>

          <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

           

          <log4j:configuration debug="false" xmlns:log4j="http://jakarta.apache.org/log4j/">

              <!--

                   配置控制臺輸出

              -->

              <appender name="console" class="org.apache.log4j.ConsoleAppender">

                  <layout class="org.apache.log4j.PatternLayout">

                      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>

                  </layout>

              </appender>

           

              <!-- Perf4J appenders -->

              <!--

                 AsyncCoalescingStatisticsAppender收集StopWatch的日志信息并傳送到下游的文件appenders

              -->

              <appender name="CoalescingStatistics"

                        class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">

                  <!--

                       TimeSlice配置多少時間間隔去做一次匯總寫入文件中

                       默認值是 30000 ms

                  -->

                  <param name="TimeSlice" value="10000"/>

                  <appender-ref ref="fileAppender"/>

              </appender>

           

              <!-- 把匯總的perf4j的日志信息寫到perfStats.log文件中去 -->

              <appender name="fileAppender" class="org.apache.log4j.FileAppender">

                  <param name="File" value="/home/perfStats.log"/>

                  <layout class="org.apache.log4j.PatternLayout">

                      <param name="ConversionPattern" value="%m%n"/>

                  </layout>

              </appender>

           

              <!-- Loggers -->

              <!-- 

                 配置perf4j logger

                 Additivity設置成false主要因為是不想讓代碼運行時間的日志輸出給上游appenders,即不要在控制臺輸出。

              -->

              <logger name="org.perf4j.TimingLogger" additivity="false">

                  <level value="INFO"/>

                  <appender-ref ref="CoalescingStatistics"/>

              </logger>

           

              <!-- 

                 Root logger打印所有日志,但不包含perf4j的信息。原因是在TimingLogger配置中設置了additivityfalse

              -->

              <root>

                  <level value="INFO"/>

                  <appender-ref ref="console"/>

              </root>

          </log4j:configuration>

           

           

          黃色背景是perf4j的配置信息。其他都是log4j的基本配置。下面是測試perf4j與log4j集成的代碼。

          package com.baowu.perf4j;

           

          import org.apache.log4j.Logger;

          import org.perf4j.StopWatch;

          import org.perf4j.log4j.Log4JStopWatch;

           

          public class Perf4JAppenderExample {

              public static void main (String[] args) throws Exception {

                  Logger rootLogger = Logger.getRootLogger();

                  for (int i = 0; i < 10; i++) {

                      // Log4JStopWatch默認使用org.perf4j.TimingLogger這個類

                      StopWatch stopWatch = new Log4JStopWatch();

                      //模擬代碼運行時間

                      Thread.sleep((long) (Math.random() * 1000L));

                      //打印到控制臺

                      rootLogger.info("Normal logging messages only go to the console");

                      stopWatch.lap("firstBlock");

                      Thread.sleep((long) (Math.random() * 2000L));

                      stopWatch.stop("secondBlock");

                  }

              }

          }

           

          運行代碼。

          控制臺輸出:

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

          INFO root - Normal logging messages only go to the console

           

          文件輸出:


           

          輸出格式也可以改成CSV格式。配置:

          <appender name="fileAppender" class="org.apache.log4j.FileAppender">

                  <param name="File" value="/home/perfStats.log"/>

                  <layout class="org.apache.log4j.PatternLayout">

                      <param name="ConversionPattern" value="%m%n"/>

                  </layout>

          </appender>

          org.apache.log4j.PatternLayout改成org.perf4j.log4j.StatisticsCsvLayout即可。

          具體的參數請查看api
          下載工程


          posted @ 2012-04-16 13:59 yangpingyu 閱讀(4631) | 評論 (0)編輯 收藏

          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          收藏夾

          linux

          產品交互

          分析,設計,架構

          安全

          技術牛人

          數據庫

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 苍溪县| 子洲县| 阿合奇县| 察隅县| 黄骅市| 奈曼旗| 句容市| 辉县市| 通河县| 商丘市| 孝昌县| 高密市| 重庆市| 繁峙县| 巴里| 永昌县| 紫云| 奈曼旗| 咸阳市| 垫江县| 宁波市| 河间市| 布拖县| 平湖市| 榆树市| 得荣县| 永吉县| 玉溪市| 金湖县| 改则县| 北宁市| 渝北区| 白沙| 苏尼特左旗| 旬邑县| 斗六市| 鄂托克前旗| 莒南县| 垫江县| 天全县| 木里|