« TeamFile | Main | ジスロマックSR »

2009.03.08

Perf4j : AspectJと組み合わせる(1)

 Perf4jは、個人的にはAOP&アノテーションと組み合わせて利用するのが便利なのではないかなぁ、と(Seasar2やS2DaoでAOP&アノテーションにどっぷり浸かっているからかもしれませんが)。

 Perf4jとAspectJを組み合わせて使う方法は、Using AspectJ Load-Time Weaving to Integrate Timing Aspects at Run Timeにまとめられています。

 AspectJのページから、AspectJのバイナリファイル(jar)ファイルをダウンロード。このjarファイルは、実行することによりインストーラとして機能しますが、そのまま解凍する(Windowsの場合は.zipにリネームすると楽)ことも可能。最低限必要となるのは、aspectjrt.jarとaspectjweaver.jarの2ファイル。その他の必要となるライブラリとあわせて、クラスパスを通しておきます。

【aop.xmlに関して】
 クラスパスのルートの直下にMETA-INFフォルダを作成し、その中にaop.xmlを配置します。Eclipseでソースフォルダとしてsrcを使用している場合、src/META-INFとなります。
 weaver要素内のinclude要素で、Perf4jのアノテーションを使用する(実際にアノテーションを用いてAOPを行いたい)クラスを定義します。aop.xmlの記述方法等に関しては、Configuration Chapter 5. Load-Time Weavingに記述されています。

【ログ出力に関して】(log4jを前提としています)
 Using the log4j Appenders to Generate Real-Time Performance Informationの設定をベースに作成します。
 org.perf4j.log4j.AsyncCoalescingStatisticsAppender を使用すると一定時間毎のログ情報を集計してサマリを出力することができますが、Appenderの仕様上、log4j.propertiesではなくlog4j.xmlで定義する必要があるようです(参考:Log4J徹底解説 - その他のAppender - AsyncAppdender。AsyncCoalescingStatisticsAppenderはAsyncAppenderを直接継承しているわけではありませんが、設定の方法(AppenderにAppenderを追加する)からすると同様のことが当てはまると思われます)。
 デフォルトでは、org.perf4j.TimingLoggerをロガーとして使用しますが、@Profiledアノテーションにおいてloggerパラメータを指定することで別のロガーを使用することもできます。

【処理時間の測定】
 処理時間の測定を行いたいメソッド(あるいはコンストラクタ)に対して、@Profiledアノテーションを適用すればOKです。メソッドに対する指定となるので、測定対象となる最小の粒度はメソッド単位となります。あるメソッド内のさらにごく一部の処理時間を測定するのであれば、メソッドを切り出すか、あるいは他の方法を使用する必要があります。

【実行】
 起動時の自動AOPを有効にするためには、VM起動時に、

-javaagent:./lib/aspectjweaver.jar

のパラメータを指定しておく必要があります(パスは実際のファイルの場所に合わせて修正)。

【補足】
 どうも、最後のログ出力が正常に行われていないようです(測定間隔の最後の1ブロック)・・・。

#多分、続く・・・(ただ、続きがいつになるやら?)

|

« TeamFile | Main | ジスロマックSR »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/44200116

Listed below are links to weblogs that reference Perf4j : AspectJと組み合わせる(1):

« TeamFile | Main | ジスロマックSR »