実習 1.2: ヒープ・ダンプのキャプチャー

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

シナリオ

Web プロキシー・アプリケーションの一部として 3 層からなるキューイング・システムがあるとします。キューイング・システムの各層にはそれぞれ独自のキューがあります。テスト・チームは、アプリケーションがメモリー・リークを起こしていると判断し、それがキューイング・システムにあるのではないかと推測しています。 あなたは、そのキューのうちの 1 つの開発者として、どの層がメモリー・リークの原因になっているのかを調べる業務を与えられました。

概要

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

ヒープとは、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. 「概要」サブタブで、「メモリー・リーク分析 - 手動ヒープ・ダンプ (Memory Leak Analysis - Manual heap dumps)」プロファイル・セットのチェック・ボックスにチェック・マークを付けます。(「プロファイル・セット」は、実行時に収集されるプロファイル・データのタイプを定義します。)
    10. プロファイル」をクリックします。アプリケーションが実行され、画面表示が次のように切り替わります。
      • プロセスに対する「プロファイル」リソースと、「自動リーク分析 (Automatic Leak Analysis)」のプロファイル・タイプを表示するエントリーが、プロファイル・モニターに表示されます。
      • 「リーク候補 (Leak Candidates)」ビューが開き、次に行う指示を伴う「現在の状況 (Current Status)」メッセージが表示されます。
        : Agent Controller が使用不可であるというセキュリティー・メッセージを受け取った場合は、データの収集に失敗したときをお読みください。
  2. ヒープ・ダンプのキャプチャー
    1. メニュー・バーから、「ウィンドウ」>「ビューの表示」>「コンソール」を順にクリックして「コンソール」ビューを開き、アプリケーションの処理を追跡することができます。
    2. 30 秒ほどアプリケーションを立ち上げたままにしておき、プロファイルを作成したいすべてのクラスがロードされ初期化されたことを確認します。
    3. 「リーク候補 (Leak Candidates)」ビューの指示に従い、「ヒープ・ダンプのキャプチャー (Capture Heap Dump)」ツールバー・ボタン をクリックして、ヒープ比較の開始点となる基本のヒープ・ダンプをキャプチャーします。プロファイル・モニターに、ヒープ・ダンプを表示するための追加のエントリーが表れます。
    4. しばらくの間、アプリケーションを実行させたままにして、もう一度「リーク候補 (Leak Candidates)」ビューの指示に従って 2 回目のヒープ・ダンプを同じようにキャプチャーします。 プロファイル・モニターに、2 回目のヒープ・ダンプのエントリーが表示されます。
    5. 「コンソール」ビューの「終了」ボタン をクリックして、プロセスを終了します。

データの収集に失敗したとき

プロファイル・データを収集する前に、あらかじめ Agent Controller を実行している必要があります。Agent Controller が使用できないというメッセージを受け取った場合、Agent Controller がインストール済みであることを確認してから、手動で起動して、もう一度試してみてください。インストールの詳細については、インストール・ガイドを参照してください。インストール・ガイドには、LaunchPad を使用してアクセスできます。また、製品 CD の disk1/install.html からもご利用になれます。

データの収集を終えたら、実習 1.3: リーク候補の分析を開始する準備が整いました。

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.