-XX:+PrintClassHistogram

(追記: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負荷。ファイル出力分は結構ディスク食うので注意。乱発は出来ないにせよ、トラブル対応・メモリリーク検知のためであれば躊躇する理由はほとんど無いかと