2010-01-28 24 views
20

您是否在您的Java應用程序中使用Perf4J來收集和分析性能統計信息?您是否使用過Perf4J來收集和分析Java應用程序中的性能指標?

什麼是典型模式(使用日誌文件,實用程序,UI,JMX等)?

您使用註釋和基於AOP的功能嗎?

您使用過任何JMX集成嗎?

您是如何處理生產配置的?

在應用程序中是否包含性能統計視圖/報告作爲功能?

請告訴您是否以及爲什麼您決定採用替代庫/方法。

+0

已經遇到過Perf4J但從未嘗試過,所以也會感興趣。 – Mark 2010-01-28 22:08:57

回答

11

我使用Per4j來監控Web服務端點性能以及內部服務和dao類的性能。

我主要只是將原始性能統計信息記錄到日常滾動文件中。然後,我使用命令行上的jar來分析不同時間片的數據。我經常使用命令行選項-g來輸出一個html文件,然後我可以打開並查看數據,這是非常有用的。

我喜歡使用Spring AOP和@Profiled註釋。它使時序非常乾淨。我對perf4j降級性能抱有一些懷疑,並且我可以很容易地提出,我可以通過從我的Spring applicationContext.xml文件中刪除TimingAspect來關閉註銷。

<!-- just remove and all uses of @Profiled do nothing --> 
<bean id="timingAspect" class="org.perf4j.log4j.aop.TimingAspect"/> 

關於平均值和注意最大值。在進行性能調整時,我們進行了一個方法調用,該調用具有大標準差的百搭值。大部分價格都在中位數附近,但是有一些電話的數量比平均水平高出100倍。更多的用戶錯誤比任何東西,但小心。

我用AsyncCoalescingStatisticsAppender的時間片15000,但很難讀取日誌。因爲我有原始的性能日誌,所以我可以通過在命令行上運行perf4j來砍掉並更改它。

我嘗試了JMX集成,它按照文檔所承諾的那樣工作。但我目前沒有真正的用處。

我有計劃使用SNMP公開數據,如果它有用,我會貢獻。

總之,我推薦Perf4j。

3

我已經使用了Perf4J,並最終拋棄了它,因爲我已經在使用Spring AOP。我很樂意簡單地整合這兩者,但卻遇到了麻煩(因爲Perf4J appender)。

我試圖通過註釋和AOP而不使用JMX來使用Perf4j。 您可以通過配置文件處理生產cfg。總體而言,我喜歡Perf4j方法,但由於我已經在使用Spring進行性能監控,因此我不需要perf4j。 Perf4j免費提供的一件事是min/max /標準dev;和其他庫一樣,你必須自己做數學。

我的事情的Perf4是不錯的,如果你沒有任何其他的lib,可以提供攔截(AspectJ的AOP或),但因爲我已經有了春天它來實現性能測量更容易。使用Spring可以輕鬆地通過JMX公開bean屬性。

7

我在客戶端 - 服務器應用程序中使用Perf4J來計時RPC調用。實現起來相當簡單:我只需要在RPC調度程序servlet周圍包含幾行代碼即可測量每個RPC方法調用。時間度量被寫入到一個單獨的日誌文件中,聚合的數據保存在內存中用於圖形化servlet。配置只需幾分鐘。

這是從preHandle()方法的摘錄:

request.setAttribute("stopWatch", new CommonsLogStopWatch()); 

此代碼從的postHandle()方法:

LoggingStopWatch stopWatch = (LoggingStopWatch)request.getAttribute("stopWatch"); 
stopWatch.stop(methodName); 

這裏是我log4j.cfg的相關部分:

<logger name="org.perf4j.TimingLogger" additivity="false"> 
    <level value="info"/> 
    <appender-ref ref="CoalescingStatistics"/> 
    <appender-ref ref="statsAppender"/> 
</logger> 

<appender name="CoalescingStatistics" 
      class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender"> 
    <param name="TimeSlice" value="60000"/> 
    <appender-ref ref="graphPatientChart"/> 
</appender> 

<appender name="graphPatientChart" 
      class="org.perf4j.log4j.GraphingStatisticsAppender"> 
    <param name="GraphType" value="Mean"/> 
    <param name="TagNamesToGraph" value="getPatientChart,idleNotification"/> 
</appender> 

<appender name="statsAppender" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyy-MM-dd"/> 
    <param name="file" value="WEB-INF/log/meona-performance.log"/> 
    <param name="append" value="true"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%m%n"/> 
    </layout> 
</appender> 

我希望圖形化servlet更具交互性:如果我可以選擇標籤來包含在圖表中。您是否遇到過可用於分析時間測量日誌的UI應用程序?

+0

馬蒂亞斯,謝謝。不,我沒有機會繼續使用perf4j。 – topchef 2010-07-30 12:20:47

相關問題