(追記:2010/05/12 JDK5以降ではjmap使おうぜ!)
Java1.4.2以降で使える、オブジェクト情報をダンプできるようにするオプション、-XX:+PrintClassHistogram*1は百利あって一害なしくらいの勢いでお勧めですが*2、ログを見て、へーと思った点を少し。
verbose:gcおよび、GCの前後にヒープ情報を出力してくれる-XX:+PrintHeapAtGCオプションと併用すると、SIGQUIT送信時のログ出力の流れは以下のようになります。
- スレッドダンプ
- Full GC
- Class Histogram
まずちゃんとFullGCして、きれいな状態でヒストグラムを出していること。ヒストグラムの前後にPrintHeapAtGCのログが出ており、ヒストグラム出力が「GC的なもの」とみなされていること(ただし、この期間ではヒープ領域に変化は起こっていない)。-Xloggc:オプションをつけるとGCログのほうにヒストグラム出力が流れるので注意です。
*1:肥え続けるTomcatと胃を痛めるトラブルハッカー (1/3):現場から学ぶWebアプリ開発のトラブルハック(8) - @ITは良い記事です。
*2:(以下、全く厳密な測定ではないですが)性能面の影響は、通常運用時にはほぼゼロ。ダンプ出力時はFullGC+α程度のCPU負荷。ファイル出力分は結構ディスク食うので注意。乱発は出来ないにせよ、トラブル対応・メモリリーク検知のためであれば躊躇する理由はほとんど無いかと