スタートアップ・ガイド: メモリー・リーク分析

メモリー・リーク (Java™ では、オブジェクトが参照を誤って保持した場合に発生する) が発生すると、パフォーマンスが低下し、最終的にはプログラムが破損する可能性があります。「プロファイルおよびロギング」パースペクティブには、アプリケーションのメモリー使用状況を分析し、これらのリークを検出するためのビューが組み込まれています。

メモリー・リークの分析には、以下のビューを使用できます。

リークを識別した後で、Probekit を使用して、リーク中の特定オブジェクトを調査するカスタム・プローブを設計できます。

リークの候補をすばやく識別するには、「メモリー・リーク分析」プロファイル・セットでプロファイルを作成することによってメモリー・リーク分析を実行します。 また、「メモリー分析」プロファイル・セットを使用してプロファイルを作成することにより、メモリー使用状況を調査することもできます。「オブジェクト・リファレンス・グラフ」ビュー、「オブジェクト・リファレンス」ビュー、および「オブジェクト詳細」ビューを使用してこのデータを参照できますが、このデータを使用してリーク候補のリストを生成することはできません。

親トピック: ランタイムの問題判別に関するスタートアップ・ガイド

メモリー・リーク分析の実行

メモリー・リーク分析では、拡張アルゴリズムを使用し、2 つのヒープ・ダンプの比較に基づいてメモリー・リークが疑われる場所を識別します。 ヒープ・ダンプを手動で取得するか、プロファイル・セットで指定した時間に自動的に取得するように、プロファイル構成を定義できます。

前提条件:

リークを分析するには

  1. 「プロファイル」ダイアログ・ボックスの「プロファイル」タブで、 「メモリー・リーク分析 - 手動ヒープ・ダンプ」または 「メモリー・リーク分析 - 時刻指定ヒープ・ダンプ」プロファイル・セットを選択します。
  2. 「プロファイル」をクリックし、アプリケーションを起動します。 「リーク候補」ビューが開き、プロファイル実行の状況情報が表示されます。
  3. 「手動」ヒープ・ダンプを取得する場合は、次の手順を実行します。
    1. アプリケーションをウォームアップします。メモリー内に必要なものがすべてメモリー内にそろうまで、アプリケーションを使用します。 検査するトランザクションを数回、実行します。
    2. 「リーク候補」ビューで「ヒープ・ダンプの取得」ボタン 「ヒープ・ダンプの取得」ボタンをクリックして、最初のヒープ・ダンプを取得します。このヒープ・ダンプがプロファイル・モニターにプロファイル・リソースとして追加されます。
    3. 検査するトランザクションをさらに数回、実行します。
    4. 2 番目のヒープ・ダンプを取得します。この時点で、アプリケーションを終了することができます。
  4. 「時刻指定」ヒープ・ダンプを取得する場合は、2 つのヒープ・ダンプが取得されたこと、および分析を開始できることが「リーク候補」ビューに表示されるまで、アプリケーションが実行されます。 デフォルトでは、最初のヒープ・ダンプは 10 分後 (600 秒後) に取得され、 2 番目のヒープ・ダンプはさらに 10 分後に取得されます。 この時点で、アプリケーションを終了することができます。
  5. 「リーク候補」ビューで、「リークの分析」ボタン 「リークの分析」ボタンをクリックします。
  6. 「リーク分析オプションの選択」ダイアログ・ボックスで、 「OK」をクリックします。 分析が完了すると、「リーク候補」ビューには、2 番目のヒープ・ダンプ時にオブジェクトへの参照を保持していたヒープ内のオブジェクトが、メモリーをリークしている可能性の高いオブジェクトから順にリストされます。
  7. 最も可能性の高いリーク候補をダブルクリックし、それを 「オブジェクト・リファレンス・グラフ」ビューに表示します。 グラフでは、リークのルート (参照を保持しているオブジェクト) とリークした可能性のあるオブジェクトとの間のパスが強調表示されます。このパスを使用して、グラフ内をナビゲートできます。オブジェクトまたはパス・セグメントにカーソルを合わせると、そのオブジェクトまたはパス・セグメントについての統計情報を表示できます。 このようにして、保持されているメモリーの量を調査し、参照を除去できるかどうかを検討できます。
  8. 「オブジェクト・リファレンス・グラフ」ビュー内のオブジェクトをダブルクリックし、 「オブジェクト詳細」ビューにオブジェクトの情報を表示します。 このビューは、現在のオブジェクトについてのすべての情報をテーブル形式で表示します。この情報には、オブジェクトの参照元 (現在のオブジェクトを参照するオブジェクト) や参照先 (現在のオブジェクトが参照するオブジェクト) についての追加データも含まれます。

この時点でコードを変更して、不要になった参照をクリーンアップすると、ガーベッジ・コレクターが不要なオブジェクトを収集できるようになります。アプリケーションのプロファイルを再作成して、リークが修正されたことを確認し、別のリークを検出します。

詳細については、メモリー・リークの分析を参照してください。

メモリー分析でのメモリーの使用状況の調査

「メモリー分析」プロファイル・セットをメモリー/リーク分析プロファイル・タイプとともに使用すると、オブジェクト・リファレンスを収集し、ヒープ・ダンプを表示することができます。 「オブジェクト・リファレンス・グラフ」ビュー、「オブジェクト・リファレンス」ビュー、および「オブジェクト詳細」ビューでこのデータを表示できますが、このデータを使用してリーク候補のリストを生成することはできません。

メモリーの使用状況を調べるには、次の手順を実行します。

  1. 「プロファイル」ダイアログ・ボックスの「プロファイル」タブで、「メモリー分析」プロファイル・セットを選択します。 このプロファイル・セットは、リーク候補を自動的に識別しません。
  2. 「プロファイル」をクリックし、アプリケーションを起動します。
  3. 分析したいアプリケーション部分を実行します。
  4. プロファイル・モニターで、エージェント・プロファイル・リソースを右マウス・ボタン・クリックして、ポップアップ・メニューから「オブジェクト・リファレンスの収集」を選択します。この時点で、プログラムを終了することができます。プロファイル・リソースは、実行用に収集されたデータとともにプロファイル・モニターに表示されます。
  5. オブジェクト・リファレンスを表示するには、ポップアップ・メニューからプロファイル・リソースを右マウス・ボタン・クリックし、「アプリケーションから開く...」とビューの名前を選択します。
使用条件 | フィードバック
(C) Copyright IBM Corporation 2004. All Rights Reserved. (C) Copyright IBM Japan 2004