JavaアプリケーションでPerf4Jを使用して、パフォーマンス統計を収集および分析しましたか?
典型的なパターンは何でしたか(ログファイル、ユーティリティ、UI、JMXなどを使用)?
注釈とAOPベースの機能を使用しましたか?
JMX統合を使用しましたか?
本番構成をどのように処理しましたか?
アプリケーションの機能としてパフォーマンス統計ビュー/レポートを含めましたか?
代替のライブラリ/アプローチを決定したかどうか、またその理由を教えてください。
JavaアプリケーションでPerf4Jを使用して、パフォーマンス統計を収集および分析しましたか?
典型的なパターンは何でしたか(ログファイル、ユーティリティ、UI、JMXなどを使用)?
注釈とAOPベースの機能を使用しましたか?
JMX統合を使用しましたか?
本番構成をどのように処理しましたか?
アプリケーションの機能としてパフォーマンス統計ビュー/レポートを含めましたか?
代替のライブラリ/アプローチを決定したかどうか、またその理由を教えてください。
Per4jを使用して、Webサービスエンドポイントのパフォーマンスと、内部サービスおよびdaoクラスのパフォーマンスを監視しています。
私は主に、生のパフォーマンス統計を毎日のローリングファイルに記録します。次に、コマンドラインでjarを使用して、必要に応じてさまざまなタイムスライスでデータを分析します。私はよく-g
コマンドラインオプションを使用してhtmlファイルを出力します。このファイルを開いてデータを視覚的に表示できます。これは非常に便利です。
@Profiled
アノテーション付きのSpringAOPの使用を楽しんでいます。タイミングがとてもきれいになります。perf4jのパフォーマンスの低下についていくつか疑問がありましたTimingAspect
が、Spring applicationContext.xmlファイルからを削除することで、ログをオフにできることを簡単に提案できました。
<!-- 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をお勧めします。
RPC呼び出しのタイミングをとるために、クライアントサーバーアプリケーションでPerf4Jを使用しています。実装は非常に簡単でした。各RPCメソッド呼び出しを測定するために、RPCディスパッチャーサーブレットの周りに数行のコードを含めるだけで済みました。時間測定値は別のログファイルに書き込まれ、集計データはグラフ作成サーブレットで使用できるようにメモリに保持されます。構成はほんの数分でした。
これは、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>
グラフサーブレットをよりインタラクティブにしたいと思います。グラフに含めるタグを選択できれば便利です。時間測定ログの分析に使用できるUIアプリケーションに出くわしたことがありますか?
私はPerf4Jを使用しましたが、すでにSpring AOPを使用していたため、最終的には廃止しました。2つを単純に統合したいのですが、問題が発生していました(Perf4Jアペンダーのため)。
JMXなしでアノテーションとAOPを介してPerf4jを使用しようとしました。構成ファイルを介して本番環境のcfgを処理できます。
全体的に、私はPerf4jアプローチが好きでしたが、パフォーマンスの監視にすでにSpringを使用していたので、perf4jは必要ありませんでした。Perf4jが無料で提供するものの1つは、最小/最大/標準偏差です。他のライブラリでは、自分で計算を行う必要があります。
インターセプト(aspectJまたはAOP)を提供できる他のlibがない場合、perf4jは素晴らしいと思いますが、私はすでにSpringを持っていたので、パフォーマンス測定を実装する方が簡単でした。Springを使用したJMXを介してBeanプロパティを簡単に公開できます。