Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

java/MemoryLeaks

メモリリークの解消法

ガベージコレクション頻度のログをとり、それを可視化する

目的:GCの頻度とヒープ領域使用量のざっくりとした状況を把握する。

VM引数の-Xloggcを使用して、GCのログをファイルに記録する。

以下はlogディレクトリのgc.logファイルに書き込む例。

java -Xloggc:log/gc.log server.jar

GCViewerを使う

gcviewerをインストールし、先のgc.logを読み込ませる。

gcviewer.png

グラフの各要素の意味は以下の通り。

gcviewer2.png

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で読み込ませる。