VisualVMでSAStrutsのプロファイリングなど試してみる その1
VisualVMを使って、
ローカルPC上のTomcatで動くWebアプリケーションの
プロファイリングを行なってみましょう。
前準備
- http://tomcat.apache.org/ よりTomcat6をダウンロードして解凍する。
- http://sastruts.seasar.org/ より SAStrutsチュートリアルをダウンロードして解凍する。
- SAStrutsのwebappのフォルダ名をsastrutsに変更して、Tomcatのwebapps直下にコピー。
- Tomcatのbin/startup.batなどを叩いてTomcat6を起動する。
- http://localhost:8080/sastruts/ にアクセスする。
これでWebアプリケーションが動き始めます。
今回はSAStrutsを使いましたが、別に何でも構いません。
VisualVMの起動
- https://visualvm.dev.java.net/ よりVisualVM1.0RCをダウンロードして解凍する。
- bin/visualvm.exeを実行してVisualVMを起動する。
これでVisualVMが起動しました。
なお、初回起動の場合はキャリブレーションが実行されます。
「Local」の下にいる「Tomcat」をダブルクリックすれば、JVMの情報などを確認できます。
右クリックメニューから、スレッドダンプ取得やプロファイリングなどが行なえます。
Java5でTomcatを動かすと、右クリックメニューには
スレッドダンプ取得やプロファイリングなどは出てきません。
[Monitor]タブでは、メモリ使用率やスレッド数を確認することができます。
[Threads]タブでは、稼動中の全スレッドを見ることができます。
DBアクセスを行なった直後。HSQLDBが動き始めたことが分かります。
特定のスレッドをダブルクリップすれば、どれぐらい稼動したりスリープしたかを確認できます。
[Profiler]タブで「CPU」をクリックして、アプリケーションを動かすと
メソッドごとの処理時間と処理発生回数を取得してくれます。
FileSync.syncというメソッドが1回の処理で随分時間を使っているようですが
この処理時間には、Sleepなんかもきっと含まれてるんでしょうね。
ちなみに、「CPU」をクリックした直後にアプリケーションを動かすと
随分と処理に時間が掛かってしまうのですが、
この際にオンデマンドアタッチで、プロファイリング用のバイトコードが埋め込まれるようです。
いったんバイトコードが埋め込まれてしまうと、体感には差が感じられません。
プロファイリングによるオーバーヘッドは随分と小さそうです。
今度は[Profiler]タブで「Memory」をクリックしてみましょう。
、、、あれ?
なんか音もなくTomcatが落ちてしまいました。
Tomcatを再起動して、もう一度同じ処理を試してみましたが
やはり結果は同じ。
#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d902e7d, pid=16636, tid=19668
#
# Java VM: Java HotSpot(TM) Client VM (10.0-b19 mixed mode, sharing windows-x86)
# Problematic frame:
# V [jvm.dll+0x92e7d]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
EXCEPTION_ACCESS_VIOLATIONが発生してしまったようですね。
ということで、今日はここまでにしましょう。