JRockit Memory Leak Detector ユーザーズ ガイド

     前  次    目次     
コンテンツの開始位置

Memory Leak Detector の使い方

メモリ リーク検出のためのイベントのフローとユーザ インタフェースの基本的な機能がわかったら、次は Memory Leak Detector の実際の働きを確認する番です。この節では、インタフェースのさまざまなタブについて詳しく説明しながら、実際にメモリ リークのある Java アプリケーションのモニタで Memory Leak Detector がどのように働くのかを見ていくことにします。インタフェースの各タブについて、この節で詳細に説明します。

この節の内容は以下のとおりです。

 


アプリケーションの分析

[Trend] タブ (図 3-1) でアプリケーションの分析を開始します。最も増大速度 (バイト数/秒) の大きいオブジェクト タイプが赤でマークされて [Trend Analysis - Which types are leaking?] テーブルの上部に表示されます。更新のたびに、このリストが変化して、最も増大速度の大きかったタイプがリストの下方に移動することがあります。図 3-1 のリストに表示されているオブジェクト タイプは、サンプル アプリケーションから取得されたものです。赤でマークされたオブジェクトにメモリ リークがあると推測できます。

図 3-1 メモリ リーク分析

メモリ リーク分析

表 3-1 は、[Trend] タブのテーブルの各列に表示される情報の説明をまとめたものです。

表 3-1 [Trend Analysis - Which types are leaking?] テーブルの各列
列見出し
表示内容
Type
オブジェクトのタイプ (クラス)。
Growth (bytes/sec)
このタイプのオブジェクトのメモリが 1 秒あたり何バイトずつ増加しているか。
% of Heap
このタイプのオブジェクトが Java ヒープ全体の何パーセントを占めているか。
Size (KB)
その割合に相当する KB 単位のサイズ。
# Instances
現在生存しているこのタイプのオブジェクトの数。

アプリケーションの分析を開始するには

アプリケーションの分析を休止するには

アプリケーションの分析を停止するには

調査を開始するには

  1. メモリ リークがあると思われるオブジェクトを右クリックします。
  2. [Show Referring Types] を選択します。
  3. [Types] タブが表示されます (図 3-2)。さらに詳しい調査の方法については、「メモリ リークのあるオブジェクトを詳しく見るには」を参照してください。

 


疑わしいオブジェクト タイプの調査

メモリ リークと疑われるもの (増大速度が大きくて、赤でマークされているタイプ) を見つけたら、それをさらに [Types] タブ(図 3-2) で調査します。そのためには、[Trend] タブでタイプを選択することによって調査を開始する必要があります (「調査を開始するには」を参照してください)。

[Types] タブには、調査対象のタイプを指しているすべてのタイプの間の関係が表示されます。タイプごとに数字も表示されます。これはそのタイプを指しているインスタンスの数です。

図 3-2 [Types] タブ

[Types] タブ

暗い赤は増大速度の大きいタイプを表しています (ただし、実際にメモリ リークに関係しているとは限りません)。

メモリ リークのあるオブジェクトを詳しく見るには

  1. 最も暗い色のタイプをダブルクリックします。
  2. そのタイプが展開されて、さらに詳しい情報が表示されます (図 3-3)。

    図 3-3 展開されたタイプ グラフ


    展開されたタイプ グラフ

  3. メモリ リークをピンポイントできると思うレベルに到達するまで、最も暗い色のタイプをクリックし続けます。
  4. リークが疑われるタイプを右クリックします (図 3-4)。
  5. 図 3-4 メモリ リークをピンポイントしたタイプ グラフ


    メモリ リークをピンポイントしたタイプ グラフ

  6. [List Instances] を選択します。
  7. [Types] タブの [Instances] 部分が開きます。

    選択したタイプのインスタンスがここにリストされます。表示されるインスタンスは、上のタイプ グラフで選択されたタイプからの矢印で示されているタイプへの参照を持っているものだけです。

    図 3-5 [Types] タブの [Instances] リスト


    [Types] タブの [Instances] リスト

    インスタンスのリストがそれほど大きくなければ、タイプ B を指しているタイプ A のすべてのインスタンスがタブの下部に表示されます (図 3-5)。リストが大きすぎると、リストを表示しようとしたときに Memory Leak Detector がタイムアウトすることもあります。タイムアウトの設定は [File|Preferences] で変更することができます。

    [Data kept alive (bytes)] 列には、それぞれのインスタンスが保持しているデータ量が表示されます。このデータは、ガベージ コレクションの対象にはなりません。

    ウィンドウの [Overview] 部分を開くと、グラフ内での位置を確認することができます (この操作については、「グラフを鳥瞰するには」を参照してください)。表示内容を拡大/縮小したり中央に配置したりすることもできます (これらのツールの説明は、表 2-2 を参照してください)。

グラフを鳥瞰するには

タイプのインスタンスを調査するには

  1. [Types] タブでインスタンス (おそらく保持しているデータ量が最も多いもの) を右クリックします。
  2. [Show Referring Instances] を選択します。
  3. [Instances] タブが表示されます (図 3-6)。

 


オブジェクト インスタンスの調査

[Instances] タブ (図 3-6) には、メモリ リークが疑われるタイプのインスタンスが表示されます。矢印を見れば、具体的なフィールドの名前もわかります。インスタンスを右クリックすると、[Inspect Instance] オプションのあるポップアップ メニューが表示されます。このオプションを選択すると、そのオブジェクトに含まれているすべてのインスタンス変数が表示されます。この情報はリークのあるオブジェクトがアプリケーション内のどこにあるのか特定するのに役立ちます。

図 3-6 [Instances] タブの参照

[Instances] タブの参照

表 3-2 で、[Instances] タブに表示できるものを説明します。

表 3-2 メモリ リークの疑いがあるインスタンス
タブの部分
表示内容
Instances Graph
このグラフにはインスタンスがお互いにどのように接続しているかが示される。
Inspector
この部分では、そのオブジェクトに含まれているすべてのフィールドとそれらの値を見ることができる。表示される情報は、モニタするアプリケーションによって異なる。

 


割り当てスタック トレースの表示

[Allocation Stack Traces] タブ (図 3-7) では、特定のタイプの割り当てがコード内のどこで行われたかを確認できます。割り当てスタック トレースを有効にすると、JRockit のパフォーマンスが低下することもあります。すべての割り当てポイントについての情報を収集するのには、ある程度の時間がかかります。

図 3-7 [Allocation Stack Traces] タブ

[Allocation Stack Traces] タブ

 


設定のカスタマイズ

Memory Leak Detector は、さまざまな点をカスタマイズすることができます。図 3-8 から図 3-13 では、カスタマイズ可能な各種設定について説明します。

[Preferences] ウィンドウを開くには

プリファレンスをデフォルト値にリセットするには

  1. [File|Preferences] をクリックします。
  2. [Defaults] をクリックします。
  3. [OK] をクリックします。
  4. 図 3-8 [Confirm Exit] 設定


    [Confirm Exit] 設定

Memory Leak Detector を閉じるときに確認メッセージが表示されるようにしたい場合は、[Confirm Exit] オプションを選択します。

図 3-9 ヒープ使用率の表示

ヒープ使用率の表示

表示したい Java ヒープの使用率をここで設定します。設定した使用率に満たないタイプは表示されません。すべてのタイプを表示したい場合は、この値を 0 (ゼロ) に設定します。

図 3-10 グラフに関する設定

グラフに関する設定

タイプの [List Instances] でリストしたいインスタンスの数をここで設定します。このリストは [Types] タブの [Instances] 部分に表示されます。

図 3-12 取得される配列要素の数

取得される配列要素の数

[Number of Array Elements to fetch] では、取得される配列要素の数を指定します。[List Largest Arrays] を選択してある場合に、これらの要素が [Types] タブに表示されます。

図 3-13 タイムアウトの設定

タイムアウトの設定


  ページの先頭       前  次