実習 1.3: リーク候補の分析

始める前に、実習 1.2: ヒープ・ダンプのキャプチャーを完了する必要があります。

この実習では、リークしていると思われるオブジェクト (配列、ベクトル、セッションなど) のリストをはじめに生成します。これらは「リーク候補」となります。次に、そのリストを分析してリークを識別します。

リーク候補のリストの生成

リストを生成するには

  1. 「リーク候補 (Leak Candidates)」ビューの指示に従い、「リークの分析 (Analyze for Leaks)」ツールバー・ボタン をクリックします。「リーク分析オプションの選択 (Select Leak Analysis Options)」ダイアログ・ボックスが開きます。
  2. ダイアログ・ボックスで、収集した 2 つのヒープ・ダンプのチェック・ボックスにチェック・マークが付いていることを確認します。
    : 「しきい値 (Threshold)」の値は、デフォルトで 20 にセットされています。この設定では、20 以上の「確度 (Likelihood)」の値をもつリーク候補のみが表示されます。(「確度 (Likelihood)」の値についての詳細は、この実習で後ほど説明します。)
  3. OK」をクリックしてリストを生成します。「ソフトウェア開発プラットフォーム (Software Development Platform)」の右下端にあるインディケーターが、リーク候補の検索中であることを知らせます。

「リーク候補 (Leak Candidates)」ビューの概要

処理が完了したら、リーク候補のリストが「リーク候補 (Leak Candidates)」ビューに表示されます。

それぞれの候補は、値が 100 から 1 の間の確度を持ちます。もっとも確実な候補は、値が 100 のものです。他の候補も同様にランク付けされ、確度の降順でリストされます。 (ヒープ比較アルゴリズムは、リークのサイズと 2 回のヒープ・ダンプの間のリークの増加量に基づいて、確度の値を計算します。)

「しきい値 (Threshold)」の値は、今回のプロファイル実行で 20 にセットされているため、「確度 (Likelihood)」の値が 19 以下の候補は表示されません。

それぞれのリーク候補について、次のようなデータがビューで確認できます。

リークの分析と識別

リークを識別するには

  1. 「リーク候補 (Leak Candidates)」ビューで、確度の値 が 100 のリーク候補となるデータに注目します。
  2. リーク候補をダブルクリックします。「オブジェクト参照グラフ (Object Reference Graph)」ビューが開き、リーク候補についてのグラフィカルなデータが表示されます。(ヒープ・ダンプを表示用に準備するために、いくらか時間がかかることがあります。)
  3. オブジェクト参照グラフを調べます。次の点に注目してください。
  4. カーソルを Object 配列と String を接続しているパスの上に置き、表示される ツールチップをお読みください。「リーク候補 (Leak Candidates)」ビューに表示されたリークの数に等しい「カウント (Count)」が表示されます。これは、リークとして識別されたストリングのコレクションです。
  5. オブジェクト参照グラフで、String オブジェクトをダブルクリックします。「オブジェクトの詳細 (Object Details)」ビューが開きます。String オブジェクト、それを参照する全オブジェクト、また、それらを次々と参照する全オブジェクトについて、すべての詳細が表示されます。また、「オブジェクトの詳細 (Object Details)」ビューでは、参照元の 1 つをクリックすることで、それを介して上の階層へナビゲートしたり、参照先 (オブジェクトが参照するオブジェクト) の 1 つをクリックすることで、それを介して下の階層へナビゲートすることができます。

結果をまとめてみましょう。「セカンダリー・キュー (Secondary Queue)」が、リークしているオブジェクトであり、それは、 Vector オブジェクトが多くの String オブジェクトへの参照を保持しているためだということが分かりました。

実習 1.4: メモリー・リークの修正を開始する準備が整いました。

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