メモリー・リークの検出

Memory Analyzer は、メモリー・リークの疑いがあるものを特定できるリーク・サスペクト・レポートを提供します。ただし、このレポートを使用せずにメモリー・リークを調べることができます。適切な定義済み照会を使用して、メモリー・リークを検出してください。

このタスクについて

このタスクでは、リーク・サスペクト・レポートを使用せずにメモリー・リークを調査する推奨手順を説明しています。この手順はレポートにより自動化されています。

次の表では、メモリー・リークの問題の分析に役立つ照会のリストを示します。

表 1. メモリー・リークの検出に役立つ照会
照会グループ -> 照会 説明
「Java™ の基礎」 -> 「ドミネーター・ツリーでオープン」 クラスのツリーを表示します。各ノードのクラスはノードの子を存続させています。ツリーは保存ヒープのサイズ別に分類されます。そのため、単一の大規模オブジェクトの検出は簡単です。大量のメモリーを消費している単一オブジェクトがない場合は、ラージ・メモリー・チャンクを示すために、クラス別またはクラス・ローダー別に結果をグループ化してみてください。ツリーのグループ化方法を変更するには、ツールバーにあるグループ化アイコン () をクリックしてください。
「リークの識別」 -> 「トップ・コンシューマー」 サイズが特に大きいいくつかのオブジェクトに関する情報を返します。結果はクラス別、クラス・ローダー別、およびパッケージ別にグループ化されます。
GC ルートへのパス このグループには、いくつかの照会があります。照会を使用すると、単一オブジェクトをヒープ内に保持する責務を持つオブジェクトを識別できます。メモリー・リークの疑いがあるものに関する照会を実行します。他の照会を実行してメモリー・リークの疑いがあるものを検出できます。例えば、「ドミネーター・ツリーのビッグ・ドロップ」照会は、リークの疑いがあるものと見なされるメモリー集積点を識別します。
「Java の基礎」 -> 「重複クラス」 複数回にわたってロードされたクラスをリストします。リストを展開すると、関連付けられたクラス・ローダーが表示されます。クラス・ローダーが複数回にわたって同じクラスをロードした場合、同じライブラリーのいくつかのバージョンがデプロイされることがあります。
「リークの識別」 -> 「ドミネーター・ツリーのビッグ・ドロップ」 ドミネーター・ツリーのメモリー集積点 が表示されます。メモリー集積点は、あるオブジェクトの下の、多くの小さなオブジェクトのメモリーが集まる場所です。集積点は、オブジェクトの保持サイズとその子の保持サイズに大きな差があることにより識別されます。照会により、skip パラメーターで除外されなかった、集積点の最初のドミネーターも示されます。skip パラメーターは、一般的な Java オブジェクトを除外し、代わりにアプリケーション・コードに固有のオブジェクトを表示する目的で使用されます。

手順

  1. ヒープ・ダンプ・ファイルを開きます。「概説」ペインにヒープ・ダンプの概要が表示されます。 「エキスパート・システム・テストを実行」アイコン () をクリックし、「ヒープ・ダンプの概要」をクリックして概要を生成することもできます。
  2. 「概説」ペインの円グラフの大部分を占めるセクションを調べて、大規模なメモリー・チャンクを探します。これらのセクションにはオブジェクトの保持サイズが表示されるため、単一のオブジェクトまたはオブジェクトのグループを表示できます。保持サイズについて詳しくは、シャロー・ヒープと保存ヒープを参照してください。
  3. 各大容量メモリー・チャンクの内容を検査します。 例えば、以下を実行します。
    • マウスを円グラフのセクションの上に移動して、「インスペクター」ペインに表示される情報を確認します。
    • 円グラフのセクションをクリックして、そのセクションで実行する照会を選択します。
  4. メモリー・チャンクの内容が許容できないほど大きい場合は、メモリー・チャンクを存続させている 1 つまたは複数のオブジェクトを探します。 例えば、ドミネーター・ツリー・ビューや 「GC ルートへのパス」照会を使用します。


© Copyright IBM Corporation 2011, 2015.
© Copyright 2008, 2015 SAP AG and others. 本製品では Eclipse テクノロジーが採用されています。詳しくは、http://www.eclipse.org を参照してください。