メモリリークの解消法
ガベージコレクション頻度のログをとり、それを可視化する
目的:GCの頻度とヒープ領域使用量のざっくりとした状況を把握する。
VM引数の-Xloggcを使用して、GCのログをファイルに記録する。
以下はlogディレクトリのgc.logファイルに書き込む例。
java -Xloggc:log/gc.log server.jar
GCViewerを使う
gcviewerをインストールし、先のgc.logを読み込ませる。
グラフの各要素の意味は以下の通り。
Eclipse Memory Analyzerを使う
目的:メモリリークが確実な場合に、リークの原因(どのオブジェクトがリークしているか)を把握する。
実行中のVMのヒープ状態をダンプする
JDKに付属のjmapコマンドを使用する。
Linuxの場合
jmap -heap:format=b プロセス番号
Windowsの場合
jpsコマンドを使用して実行中のVMのプロセス番号を特定する。
jmap -dump:format=b,file=heap.bin プロセス番号
いずれの場合にもheap.binというファイルにヒープ状態が格納される。
Eclipse Memory Analyzer(MAT)を使う
利用中のEclipseに組み込む必要はない。スタンドアロンのアプリケーションを以下からダウンロードし、解凍して実行する。 http://www.eclipse.org/mat/
heap.binの準備
MATにheap.binを読み込ませると、heap.binと同じフォルダに作業用ファイルを勝手に作成してしまう。このため、新しいフォルダを作成してそこにheap.binを移動しておく。
heap.binの読込み
File>Open Heap Dumpで読み込ませる。