您是否在您的Java應用程序中使用Perf4J來收集和分析性能統計信息?您是否使用過Perf4J來收集和分析Java應用程序中的性能指標?
什麼是典型模式(使用日誌文件,實用程序,UI,JMX等)?
您使用註釋和基於AOP的功能嗎?
您使用過任何JMX集成嗎?
您是如何處理生產配置的?
在應用程序中是否包含性能統計視圖/報告作爲功能?
請告訴您是否以及爲什麼您決定採用替代庫/方法。
您是否在您的Java應用程序中使用Perf4J來收集和分析性能統計信息?您是否使用過Perf4J來收集和分析Java應用程序中的性能指標?
什麼是典型模式(使用日誌文件,實用程序,UI,JMX等)?
您使用註釋和基於AOP的功能嗎?
您使用過任何JMX集成嗎?
您是如何處理生產配置的?
在應用程序中是否包含性能統計視圖/報告作爲功能?
請告訴您是否以及爲什麼您決定採用替代庫/方法。
我使用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。
我已經使用了Perf4J,並最終拋棄了它,因爲我已經在使用Spring AOP。我很樂意簡單地整合這兩者,但卻遇到了麻煩(因爲Perf4J appender)。
我試圖通過註釋和AOP而不使用JMX來使用Perf4j。 您可以通過配置文件處理生產cfg。總體而言,我喜歡Perf4j方法,但由於我已經在使用Spring進行性能監控,因此我不需要perf4j。 Perf4j免費提供的一件事是min/max /標準dev;和其他庫一樣,你必須自己做數學。
我的事情的Perf4是不錯的,如果你沒有任何其他的lib,可以提供攔截(AspectJ的AOP或),但因爲我已經有了春天它來實現性能測量更容易。使用Spring可以輕鬆地通過JMX公開bean屬性。
我在客戶端 - 服務器應用程序中使用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應用程序?
馬蒂亞斯,謝謝。不,我沒有機會繼續使用perf4j。 – topchef 2010-07-30 12:20:47
已經遇到過Perf4J但從未嘗試過,所以也會感興趣。 – Mark 2010-01-28 22:08:57