入門: メモリー・リーク分析

メモリー・リークは、Java™ においてオブジェクトが不適切に参照を保持し続けるときにしばしば発生するものであり、パフォーマンスの低下の原因となり、結果としてプログラムの異常終了を起こすことがあります。「プロファイルおよびロギング」パースペクティブには、アプリケーションにおけるメモリーの使用法を分析し、これらのリークを検出するためのビューが組み込まれています。

メモリー・リーク分析のために以下のビューが使用可能となっています。

リークを識別したら、Probekit を使用して、リークしている可能性のある特定オブジェクトを厳密に調べるためのカスタム・プローブを設計することができます。

リーク候補を迅速に識別するには、「メモリー・リーク分析 (Memory Leak Analysis)」プロファイル・セットで プロファイル作成して、メモリー・リーク分析を実行してください。また、「メモリー分析」プロファイル・セットで プロファイル作成することで、メモリーの使用法を調べることもできます。このデータは「オブジェクト参照グラフ (Object Reference Graph)」、「オブジェクト参照」、および「オブジェクト詳細 (Object Details)」ビューで参照できますが、リーク候補のリストを生成するためにこのデータを使用することはできません。

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

メモリー・リーク分析では拡張アルゴリズムを使用して、2つのヒープ・ダンプの比較を基にした潜在的なメモリー・リークの識別を行います。プロファイル構成は、ヒープ・ダンプを手動でキャプチャーできるように定義するか、またはプロファイル・セットで指定済みの時刻に 自動的にヒープ・ダンプをキャプチャーするように定義することができます。

前提条件:

リークを分析するには、以下の手順を実行します。

  1. 「プロファイル」ダイアログ・ボックスの「プロファイル」タブで、「メモリー・リーク分析 - 手動でのヒープ・ダンプ (Memory Leak Analysis - Manual heap dumps)」または「メモリー・リーク分析 - 時刻指定のヒープ・ダンプ (Memory Leak Analysis - Timed heap dumps)」プロファイル・セットのいずれかを選択する。
  2. プロファイル」をクリックして、ご使用のアプリケーションを開始する。 「リーク候補 (Leak Candidates)」ビューが開き、プロファイル実行の状況情報が表示されます。
  3. 手動でのヒープ・ダンプをキャプチャーする場合、以下の手順を実行します。
    1. アプリケーションを立ち上げる: メモリー内に入るべきものすべてがメモリー内に入るまで、 アプリケーションを使用する。 調べたいトランザクションを数回、実行する。
    2. 「リーク候補 (Leak Candidates)」ビューで「ヒープ・ダンプのキャプチャー (Capture Heap Dump)」ボタン 「ヒープ・ダンプのキャプチャー (Capture heap dump)」ボタン をクリックして、最初のヒープ・ダンプをキャプチャーする。このヒープ・ダンプがプロファイル・リソースとして「プロファイル・モニター」に追加されます。
    3. 調べたいトランザクションをさらに数回、実行する。
    4. 2 番目のヒープ・ダンプをキャプチャーする。これでアプリケーションを終了することができます。
  4. 時刻指定のヒープ・ダンプをキャプチャーする場合、両方のヒープ・ダンプがキャプチャー済みであること、 および分析を開始できることが「リーク候補 (Leak Candidates)」ビューで指示されるまで、アプリケーションが実行 できるようにする。 デフォルトでは、最初のヒープ・ダンプは 10 分 (600 秒) 後にキャプチャーされ、2 番目のヒープ・ダンプは、 さらに 10 分後にキャプチャーされます。これでアプリケーションを終了することができます。
  5. 「リーク候補 (Leak Candidates)」ビューで、「リークの分析 (Analyze for Leaks)」ボタン 「リークの分析 (Analyze for leaks)」ボタン をクリックする。
  6. リーク分析オプションの選択 (Select Leak Analysis Options)」 ダイアログ・ボックスで、「OK」をクリックする。 分析が完了したら、 「リーク候補 (Leak Candidates)」ビューは、2 番目のヒープ・ダンプの時点でオブジェクトへの参照をまだ保持していたヒープのオブジェクトをリストします。その際、メモリー・リークしている可能性の一番高いオブジェクトが先頭に 示されます。
  7. 可能性が一番高いリーク候補をダブルクリックして、「オブジェクト参照グラフ (Object Reference Graph)」ビューに表示する。 このグラフでは、リークのルート (参照を保持しているオブジェクト) と、リークの可能性のあるオブジェクトの間のパスが強調表示されます。これにより、グラフをナビゲートできます。任意のオブジェクトまたはパス・セグメントの上にカーソルを一時停止させると、その統計情報を表示することができます。このようにして、保持されているメモリーの量を調べ、いずれかの参照を除去することが可能かどうかを検討することができます。
  8. 「オブジェクト参照グラフ (Object Reference Graph)」ビュー内のオブジェクトをダブルクリックして、その オブジェクトについての詳細情報を「オブジェクト詳細 (Object Details)」ビューに表示する。 このビューには、現行オブジェクトについてのすべての情報が表形式で表示されます。表示できるデータには、オブジェクトのリファラー (現行オブジェクトを参照するすべてのオブジェクト)およびレフェリー (現行オブジェクトが参照しているオブジェクト) に関する追加データが含まれます。

これで、不要になった参照をクリーンアップするようにコードを変更して、 不要のオブジェクトをガーベッジ・コレクターが収集できるようにすることができます。リークを修正したかどうかを検証し、追加のリークを検出するため、もう一度アプリケーションのプロファイルを作成してください。

詳しくは、『メモリー・リークの分析』をお読みください。

メモリー分析によるメモリー使用法の調査

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

メモリー使用法を調べるには、以下の手順を実行します。

  1. 「プロファイル」ダイアログ・ボックスの「プロファイル」タブで、 「メモリー分析」プロファイル・セットを選択する。このプロファイル・セットでは リーク候補が自動的に識別されるわけではないことに注意してください。
  2. プロファイル」をクリックして、ご使用のアプリケーションを開始する。
  3. 分析したいアプリケーション部分を実行してみる。
  4. 「プロファイル・モニター」で、エージェント・プロファイル・リソースを右クリックし、次に「オブジェクト参照の収集」をクリックする。これでプログラムを終了することができます。実行のために収集されたデータを持つプロファイル・リソースが「プロファイル・モニター」に表示されます。
  5. オブジェクト参照を表示するには、そのプロファイル・リソースを右クリックし、 「アプリケーションから開く」をクリックし、さらに表示したいビューの名前をクリックする。
フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.