演習 1.2: ヒープ・ダンプの取得

始める前に、『演習 1.1: 必要なリソースのインポート』を完了する必要があります。

シナリオ

組織に、3 階層のキューイング・システム (Web プロキシー・アプリケーションの一部) が存在するとします。キューイング・システムの各層には、独自のキューがあります。テスト・チームはアプリケーションにメモリー・リークがあると判断し、キューイング・システムが疑わしいと考えています。これらのキューのうちの 1 つの開発者であるため、どの層がメモリー・リークの原因となっているかを判断するジョブが与えられました。

概要

メモリー・リーク分析を実行するには、Java ヒープ・ダンプを 2 つ取得する必要があります。

ヒープ とは、Java 仮想マシン (JVM) の実行中に、Java オブジェクトの保管に使用するメモリーのブロックのことです。Java ヒープ・メモリーを管理するのはガーベッジ・コレクターで、ガーベッジ・コレクターは、参照が残存しない Java オブジェクトのメモリーを自動的に割り当て解除します。

ヒープ・ダンプ とは、特定時点におけるヒープ内容のイメージです。

アプリケーションの実行中の 2 つの時点でメモリーの使用状況がどのように変化したかを知るために、2 つのヒープ・ダンプが必要です。組み込みアルゴリズムがヒープを比較して、メモリー内に存在すべきでないが、存在するオブジェクトを識別します。アルゴリズムは、2 つのヒープ・ダンプの間の時間中ずっとメモリーに存在するオブジェクトや、あるクラスのオブジェクトが 2 番目のヒープで増加した数、およびオブジェクトへの参照数といったインディケーターを分析して、リークの可能性を識別します。

ヒープ・ダンプの取得の準備

ヒープ・ダンプを取得するには、プロファイルおよびロギング・パースペクティブに切り替える必要があります。

  1. Software Development Platform のメニュー・バーで、「ウィンドウ」>「パースペクティブを開く 」> 「その他...」を選択すると、「パースペクティブの選択」ダイアログ・ボックスが開きます。
  2. ダイアログ・ボックスの左下部分にある「すべて表示」をクリックします。チェック・ボックスにチェックが表示されます。
  3. パースペクティブのリストから「プロファイルおよびロギング」を選択して「OK」をクリックします。
  4. 「使用可能化の確認」ダイアログ・ボックスが開いた場合、「常に機能を使用可能にし、今後このメッセージを表示しない。」をクリックしてから「 OK」 をクリックします。
  5. Software Development Platform がプロファイルおよびロギング・パースペクティブに切り替わります。

ヒープ・ダンプの取得

このチュートリアルでは、ヒープ・ダンプを手動で取得します。(代わりに、ヒープ・ダンプを自動取得するための時間間隔を設定したり、既存のヒープ・ダンプをインポートしたりできます。)

ヒープ・ダンプを取得するには以下を行います。

  1. アプリケーションを実行します。
    1. メニュー・バーから「実行」>「プロファイル...」を選択すると、「プロファイル」ダイアログ・ボックスが開きます。
    2. 「構成」リストから「Java アプリケーション」をダブルクリックします。New_configuration エントリーがリストに表示されます。
    3. 「名前」フィールドに ThreeTierQueue_MemLkAnalysis と入力します。
    4. 「メイン」タブで、「プロジェクト」フィールドの横にある「ブラウズ」をクリックします。「プロジェクトの選択」ダイアログ・ボックスが開きます。
    5. ThreeTierQueue を選択して「OK」をクリックします。
    6. 「メイン・クラス」フィールドの横にある「検索」をクリックします。
    7. 「メイン型を選択」ダイアログ・ボックスで、TestThreeTierQueue を選択して「OK」をクリックします。
    8. 「プロファイル」ダイアログ・ボックスで、「プロファイル」タブをクリックします。
    9. 「概要」サブタブで、「メモリー・リーク分析 - 手動ヒープ・ダンプ」プロファイル・セットのチェック・ボックスをチェックします。(プロファイル・セット は、実行に対して収集されるプロファイル・データのタイプを定義します。)
    10. 「プロファイル」をクリックします。アプリケーションが実行して、表示が以下のように変更されます。
      • プロセスのプロファイル・リソースが「プロファイル・モニター」に表示されます。
      • 「リーク候補」ビューが開き、現在の状況メッセージと次に行うべきことについての説明が表示されます。
        : Agent Controller が利用不能であることを示すセキュリティー・メッセージを受け取った場合、『データを収集できなかった場合』を読んでください。
  2. ヒープ・ダンプを取得します。
    1. メニュー・バーで「ウィンドウ」>「ビューの表示」>「コンソール」を選択して「コンソール」ビューを開き、アプリケーションの処理に従って進めます。
    2. アプリケーションが立ち上がるまで約 30 秒待機し、プロファイルを作成するすべてのクラスのロードおよび初期化が確実に行われるようにします。
    3. 「リーク候補」ビューの指示に従い、「ヒープ・ダンプの取得」ツールバー・ボタン をクリックして、ヒープ比較の開始点となる、ベースラインのヒープ・ダンプを取得します。プロファイル・リソースが「プロファイル・モニター」ビューに追加表示されます。1 つは「リークの自動検出」で、もう 1 つは取得したばかりのヒープ・ダンプです。
    4. アプリケーションが 1 分間実行した後、再び「リーク候補」の指示に従って、同じ方法で 2 番目のヒープ・ダンプを取得します 2 番目のヒープ・ダンプについてのプロファイル・リソースが、「プロファイル・モニター」に表示されます。
    5. 「コンソール」ビューの「終了」ボタン をクリックしてプロセスを終了します。

データを収集できなかった場合

プロファイル・データを収集できるようにするには、Agent Controller が実行中でなければなりません。Agent Controller が利用不能であることを示すメッセージを受け取った場合、Agent Controller がインストールされているか確認してから手動で開始し、再試行してください。詳しい説明は、インストール・ガイドを参照してください。 インストール・ガイドを使用するには、ランチパッドを使用するか、製品 CD の disk1/install.html から見つけてください。

データを収集したら、『演習 1.3: リーク候補の分析』に進んでください。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.
(C) Copyright IBM Japan 2005