いろんなところで書かれているけど、自分用のメモ。バッチとかで何万回も同じ処理を行っていると、段々ログの出力が遅くなり、ボン!でjava.lang.OutOfMemoryError。たぶんジャバラーは多かれ少なかれみんな経験していると思うけど。イマサラながらメモ。
GCのログ出力を設定
Javaの起動オプションに-Xloggc:ファイル名をつけます。これで、GCの状況を任意のファイルに出力できます。
例: java -Xloggc:c:\gc.log
Tomcatの場合は、start.batやstart.shあたりから起動している場合は同一ディレクトリにあるcatalina.batやcatalina.shにあるCATALINA_OPTSに上記のオプションを追加します。あと、Windowsでサービス化している場合は、tomcat7w.exe(これなんて読むの?自分は「とむきゃっとう」って読んでるけど・・・)を起動して、Java Optionsの項目に追加します。(下記図参照)
あとは問題となるJavaの処理をエッサカホッサカ実行しますとさきほど指定したログに出力されます。
GCViewerで読み込む。
さっきのログをビジュアル的に見せてくれるツールがあるので、それをダウンロード。
GCViewer is a free open source tool to visualize data produced by the Java VM options -verbose:gc and -Xloggc: ...
tagtraum industries incorporated ~ GCViewer
さっさとダウンロードして解凍して実行しましょう。下はc:\gcディレクトリに解凍した例です。
C:\gc>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は D207-E475 です C:\gc のディレクトリ 2012/10/24 21:51 <DIR> . 2012/10/24 21:51 <DIR> .. 2012/10/24 21:51 1,317,316 gcviewer-1.29.jar 2012/10/24 21:51 1,144 LICENSE.txt 2012/10/24 21:51 8,131 README.txt 3 個のファイル 1,326,591 バイト 2 個のディレクトリ 44,086,034,432 バイトの空き領域 C:\gc>java -jar gcviewer-1.29.jar <-- GCViewer起動! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
あとはできたログをこのツールにドラッグアンドドロップでもいいし、「File」⇒「Open File」で読み込んでもいいです。