2009年8月21日金曜日

Java Interactive Profiler の設定とか

前回の続き。

JIPの設定はいたって簡単。JVMを起動するときの引数を二つ指定するだけ。

> java -javaagent:【profile.jarの場所】 -Dprofile.properties=【設定ファイルの場所】

Tomcatで使う場合には環境変数CATALINA_OPTSかJAVA_OPTSに指定してやると良いだろう。

profile.jarはJIPをダウンロードして解凍すると profileディレクトリの下にあるのでそれを適当な場所においてその場所を指定すれば良い。
設定ファイルは、Tomcatで使うんであればサンプルで付いて来る webapp.profile.properties をほぼそのまま使えば良い。fileプロパティで好きな場所にプロファイリング結果を吐くようにして、include,excludeプロパティで特定クラスだけプロファイリング対象にするようにするとよい。

さて、これで起動すればプロファイリングが始まる・・・と思ったら罠が。webapp.profile.propertiesでは
  • profiler=off
  • remote=on
  • port=15599
となっている。これは「Tomcat起動時はあまりプロファイリングしてもしょうがないだろうから、起動したらプロファイリング開始すればいいじゃん」って意図なのかと。最初から起動してて欲しければprofilerプロパティをONにしておけばいい。

で、どうするかというと、clientディレクトリに入っているstart.sh(start.bat)を使う

> start.sh localhost 15599

これでプロファイリングが開始される。止めるときは

> finish.sh localhost 15599

これで終了して、プロファイリング結果をfileプロパティに指定したファイルに吐き出す。

output=bothになっているので、*.txtと*.xmlの二つのファイルが吐かれる。*.txtは人間が見てわかる形式で、*.xmlはclientディレクトリに入っているjipViewerに渡すことでGUIで確認できる。

「オーバーヘッドが少ない」を売り文句にしているが、実際のところはどうなのか。自分の試した限りは10%ほどのパフォーマンス劣化、Heap使用量は若干大目程度なのでhprofにくらべてかなり実用的だ(設定次第ではあるけど)。JVM起動したままON/OFF切り替えられるし。


基本的な仕組みはaopを使ってプロファイリング用のコードを練りこんでいる様子。-javaagentを指定することでクラスローダーがクラスをロードするときに一手間かけさせることができるみたいだ。

0 件のコメント: