jjkingの日記: Java Profiler
開発中の Java アプリケーションが OutOfMemoryError で落ちるため、メモリリークを調べるためにプロファイラを使おうとしている。がなかなか一筋縄ではいかない。使っている JavaVM がシステムの都合上 jdk1.3.0 なので、最新のものを使えばこんなに苦労はしないでもすむのかもしれないが。
まず JDK1.3 以降に標準でついている hprof を使ってみた。どこでリークしているか詳細をつかむために heap=dump オプションを使ってみる。
- java -Xrunhprof:format=b,heap=dump ...
アプリケーションを少し使って終了すると Dumping Java heap ... と出てダンプが始まったがいつまでたっても終了しない。インスタンスが大量にできるようなアプリケーションではこのプロファイラは使い物にならないのか?
hprof をあきらめて、次に JMP というのを使ってみた。GTK を使っていて GUI 上にリアルタイムにプロファイルが表示されるというものである。jmp.dll と GTK にパスを通して起動してみる。
- java -Xrunjmp ...
ウインドウが何枚か開いて早速インスタンス情報などが表示され始めた。なかなか期待できそう。だが、アプリケーションが起動の途中でロックされたかのように止まってしまった。デバッガのようにブレークポイントでも設定されているのかと、GUI上でいろいろ探したが見当たらず結局、メモリ追跡調査は失敗した。
最後に、jmemprofというのを使ってみた。こちらは GUI が Servlet ベースで提供されるというものらしい。このプロファイラと共にアプリを起動すると今度はすんなり起動した。早速プロファイルを見ようとブラウザを立ち上げて指定された URL にアクセスしたところが..
- メモリがread になることができませんでした...
ダイアログが出て Tomcat は落ちました.. 疲れた
Java Profiler More ログイン