AOPでProfiler、でもInfraRED事件
さあ、プロファイリングするぞーっ的に力を入れなくても、必要な時にサクッとパフォーマンス分析のための情報が採取できればいいな、と思ったことが発端でした。
Webアプリケーションについて、開発環境内で開発ツールでではなく、運用システムで必要に応じて情報を採取したいと思ったのです。で、アプリケーションサーバーにそれ風の機能があっても不思議はないよなあ、と思ったら、WebSphereにはTivoliのツールが統合されているらしいではないですか。でもそれは、EJBコンテナとして利用していれば色々と有用そうな情報が採取できそうなのですが、ServletとPOJOについてはほとんど採取できるデータはなさそうです。
そこで、InfraREDというオープンソースのツールを使ってみることにしました。
InfraREDはAOPを利用したパフォーマンスモニタと謳われています。ドキュメントに記載されている特長には、確かにAOPが貢献しているいるようです。曰く、コーディング不要、APIレベルでの詳細化が可能、JDBCとかSQLの詳細情報も取れる、オーバーヘッドが小さくて実運用システムで利用できる、etc.
ドキュメントを読むとどうやら、InfraREDは、各種のメトリクスを採取するアドバイスを対象アプリケーションにweaveするアスペクトが定義されたAOPによって、パフォーマンスデータを採取するようです。なるほど、コーディングしないでPOJOのメソッドに関連づけてメトリクス採取の処理を実行するということを考えれば、AOPは理に適っているように思えます。
と言いながら、実は私はAOPなんて使ったこともなければよくわかってもいないんですが、
http://www-06.ibm.com/jp/developerworks/java/060405/j_j-jip.shtml で、まんまプロファイラにはAOPが有効だ、ついては自分で作るのもお勧めだみたいなことが書かれていました。
自分で作らなくても既に立派なものがあれば活用したいということで、やっぱりこの際、InfraREDな訳です。
InfraREDでは、AspectJもしくはAspectWerkzを内部的に利用しています。付け焼刃的にAOPについて情報収集した感じでは、AspectJがJavaのコードでアスペクトを記述してコンパイルすることでアスペクトをpointcutにweaveする(編みこむ)アプローチであるのに対して、AspectWerkzはxmlでアスペクトを記述してクラスローディングの際にweaveすることが可能らしいです。
InfraREDは、デフォルトでよければ自らアスペクトを定義する必要はないようですが、一応、今後の柔軟性を考慮して、AspectWerkzの方を利用することにします(どちらを利用するかによって、インストール作業が異なります)。
さて、インストール作業を行って動かしてみると......HTTPリクエストレベルの情報しか取れません。
POJOのAPI(メソッド)レベルの情報も、JDBCの情報も、SQLの情報も、全く採取されていません。
肝心のアスペクトが、まったくweaveされてないっぽいのです。
フォーラムにも似たような質問がいくつかあったので、結構、ひっかかるポイントなのかも。
何とかきちんと使える状態にできたら、そこら当たりのTipsを記録しておきたいと思いますが、今現在、途方に暮れていたりします。AspectWerkzのモジュールを指定したJVMオプションパラメータ-javaagentが効いてなかったり、アスペクトを定義したaop.xmlが間違っていたり、あるいは読み込めてなかったり、という辺りが怪しい気配なんですが、よくわかっていません。
明日の朝までに小人たちがせっせと編んでくれてたりしないかな。
- Category(s)
- Java,Open Source
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/takatsuka/aopprofiler30013082infrared4e8b4ef6/tbping
Re:AOPでProfiler、でもInfraRED事件(解決編)
引っかかっていたポイントは次の点でした。
(1) infrared-agent-all-servlet-x.x.x.jar のAspectWerkz用への更新
InfraREDの配布物では該当のjarファイルはAspectJ用らしく、META-INF/aop.xmlを含めてjarを更新する手順があります。
そこでMETA-INF/aop.xmlのパスを相対パスではなく絶対パスで指定していたために、結果的に作成されたjarの中に妙な状態でディレクトリ構成が再現されてしまい、InfraRED実行時にデフォルトのaop.xmlが読めなかったようです。
(2) Tomcat5.5でのJVMオプション指定
-javaagentというJVMオプションを設定するようにとドキュメントに記載されているのですが、Windowsインストーラで導入したTomcat5.5ではsetclasspath.batとか、それらしいものが見当たりませんでした。
TOMOCAT_HOME/bin/tomcat5w.exeを実行して起動されるGUIツールの「Java」タブの「Java Options:」にJVMオプションが指定できるみたいです。
こんなん、当然でしたか? 私は知りませんでした...
Re:AOPでProfiler、でもInfraRED事件