J2SE1.5から試験導入されたトラブルシューティングツールのひとつ、jmapを使用するとヒープダンプ情報を取得することができる。どのオブジェクトが今どのくらい生成されて、どのくらいのサイズを占有しているか、定量的に見ることができる優れもの。これがJDK標準装備というのは素敵ですよ、奥さん。
とりあえず、一番わかりやすいところで、ヒープのヒストグラムを表示。
# jps 497 Jps 19719 Bootstrap
# jmap -histo 19719 > heap_histo.txt
すると、「heap_histo.txt」にメモリの現状がどわーっと表示されます。
Object Histogram: Size Count Class description ------------------------------------------------------- 65156376 461687 char[] 22587104 118976 * ConstMethodKlass 19391400 484785 java.lang.String 14393048 11237 * ConstantPoolKlass 12386464 118976 * MethodKlass 10034000 102739 java.lang.Object[]
どのクラスのオブジェクトがどれくらいメモリを食っているかを知りたい場合にも良いし、メモリリーク時の原因調査の足がかりとしても使えそう。まあ、メモリリーク対策をするなら NetBeans とかのプロファイラーを使った方が良いんだけど、実運用環境で使えるという点では jmap は有用じゃないかと。
ただし、1.5ではSolaris/LinuxのJDKのみ。Windowsでは6から使えるようになるらしいッス。
このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/386