実際にOutOfMemoryを発生させるか、定期的にログを取って増減を比較するかになるらしい。
OutOfMemoryを発生させて、スタックトレースを見る
[About:Performance]Fix Memory Leaks in Java Production Applicationsに書いてあった方法。- OutOfMemoryを起こします。
- その時のメモリダンプを見ます。
- そうするとどのクラスが原因か目星がつきます。
ヒープとスレッドのダンプを取得して、増減を調べる
[Qiita]javaのメモリーリークを調査するより、ダンプを何回か取得して、増え続けていたり消えなかったりする奴がいないか調べる方法- ガーベージコレクトを実行します。
- ヒープのダンプを取ります。(時間をあけて数回とること)
$JAVA_HOME/bin/jmap -dump:format=b,file=<出力ファイル名> <プロセスID>
$JAVA_HOME/bin/jstack <プロセスID> > <出力ファイル名>
そのものズバリではなく、怪しい奴を探す方法。
オブジェクトヒストグラムで増えてるオブジェクトを探す
[めざせ!細マッチョ]Java ヒープ領域のメモリリーク発見支援ツール - オブジェクト数の diffより、オブジェクトのヒストグラムで比較する方法。ツールも公開してくれてます。
- ヒストグラムを取得します。(時間をあけて数回とること)
jmap -histo:live <プロセスID>
こちらもそのものズバリではなく、怪しい奴を探す方法。
0 comments:
コメントを投稿