arcanum_jp’s blog

おっさんの日記

Javaのガーベージコレクションの状況調査

 いろんなところで書かれているけど、自分用のメモ。バッチとかで何万回も同じ処理を行っていると、段々ログの出力が遅くなり、ボン!で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の項目に追加します。(下記図参照)



tomcat6w.exeを実行すると出てくる画面

 あとは問題となる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」で読み込んでもいいです。