チュートリアル: Java プロセスのプロファイル・データの分析
目的
Java プロセスのプロファイルを通じて収集されたデータを、
「プロファイルおよびロギング」パースペクティブの「プロファイルおよびロギング」ビュー
を使用して、以下の手順で分析します。
- 最も時間を消費するオブジェクトおよびメソッドの識別
- メモリー集中クラスの識別
- プログラムの並行性の計測
- メモリー・リークの検索
- メソッドの各実行を時間の関数としてブラウズ
- 実行動作をより幅広のビューで時間の関数として表示
- アクティブ・スレッドの識別
- スレッドがアクティブになるタイミングの識別
- 呼び出し頻度の高いメソッドの識別
- ガーベッジ・コレクションの計測
- プログラム実行のさまざまなフェーズの識別
- さまざまなメソッド呼び出しについて学習
- メソッドの呼び出し元について学習
所要時間
1 時間
始める前に
このチュートリアルを開始する前に、以下を行う必要があります。
- Eclipse プラットフォームを Hyades ツールも含めてインストールします。
- サンプルのプロファイル・ファイル (hcframe.jar) をインポートする準備をします。このファイルは、以下のディレクトリーにあります。
Hyades_install_dir¥eclipse¥plugins¥org.eclipse.hyades.collection.framework_3.3.0
説明
このチュートリアルでは、さまざまな「プロファイルおよびロギング」ビューを
使用して、サンプル PerformanceExample.class を分析します。
このサンプルは、2 つのボタンが付いた 1 つのフレームを開きます。
以下のタスクを完了してください。
- ワークベンチで「プロファイルおよびロギング」パースペクティブを開く
- PerformanceExample クラスのプロファイル
- プロファイル情報の分析
アプリケーションのモニター中にビューを更新するには、
「ビューの最新表示」ボタン
をクリックします。
「ウィンドウ」メニューから、「パースペクティブを開く」>「その他」>「プロファイルおよびロギング」をクリックします。
PerformanceExample クラスをプロファイルする手順は、以下のとおりです。
- 「プロファイル」ドロップダウン
をクリックして、「プロファイル」を選択します。「プロファイルの起動 (Launch Profile)」ダイアログが開きます。
- 「外部 Java アプリケーション」をダブルクリックして、新規構成を作成します。
- 「メイン」タブに切り替えます。
- 「クラス名」フィールドに org.eclipse.hyades.test.collection.framework.PerformanceExample と入力します。
- 「Jar の追加」をクリックして、このクラスを内包している Jar を追加します。
- 「Hyades_install_dir¥eclipse¥plugins¥org.eclipse.hyades.collection.framework_3.3.0¥hcframe.jar」を選択します。
- 「オープン」をクリックします。Jar が追加されます。
- 「プロファイル」タブをクリックします。このタブで、プロファイル基準を指定できます。
- 「概要」タブをクリックします。このタブで、フィルター・セットおよびコンテンツを指定できます。
- 「追加」ボタンをクリックして、新規のプロファイル・セットを作成します。「プロファイル・セットの追加」ウィザードが開きます。
- 「プロファイル・セット」ページで、このプロファイルの名前を指定して「次へ」をクリックします。
- 「プロファイル・タイプ」ページで、「メモリー分析」というラベルの付いたノードを展開し、「基本メモリー分析」を選択して、その隣にあるチェック・ボックスにチェック・マークを付けます。これで、メモリー関連の情報が、アプリケーションから収集される情報タイプのリストに
追加されます。
- 「時間分析」というラベルの付いたノードを展開し、
「実行時間分析」を選択して、その隣にあるチェック・ボックスをオンにします。
このオプションを選択すると、統計ビューを使用して時間関連の情報を分析できます。
「実行フロー」および「メソッド呼び出し」ビューで使用するために、
実行のグラフィック詳細を収集する必要があります。このサンプルの目的は
すべてのプロファイル・ビュー (「実行フロー」および「メソッド呼び出し」ビューを含む) について
解説することにあるため、「実行フローのグラフィック詳細を表示」を選択してください。また、「フィルター・セットによって除外された境界クラスの収集」チェック・ボックスをクリックして、「境界クラスの深さ」を 1 に設定します。「次へ」をクリックします。
- 「フィルター・セット」ページでは、分析対象となる情報のサブセットを指定することができます。分析対象に含まれていないクラスやパッケージを、フィルターに掛けて除外したい
場合に役に立ちます。
「選択されたフィルター・セットの内容」の下で、「追加」をクリックして
データを収集したいクラスまたはパッケージを追加します。
「フィルターの追加」ダイアログが開きます。
- このパッケージをプロファイルするには、「クラス」として org.eclipse.hyades.test.collection.framework.* を入力します。
- 「メソッド名」として * を入力し、
このサンプルに関連したメソッドのみが組み込まれるようにします。
- 「OK」をクリックします。フィルター基準がコンテンツ・リストに追加されます。
- フィルター・コンテンツ・リストからその他の既存のクラスを除外するには、
クラスの「ルール」列の下で「組み込み」をクリックして
「除外」に変更します。
- 「終了」をクリックします。
有効なプロファイル・セットのリストに、使用するプロファイル・セットとして
強調表示された、新規のプロファイル・セットが追加されます。
- 「制限」タブをクリックします。このタブで、経過時間、
またはメソッド呼び出しの回数のいずれかに基づいて、収集されるデータの量を制御します。
デフォルトを受け入れてください。
- 「宛先」タブをクリックします。「プロファイル・プロジェクト (ProfileProject)」および「デフォルト・モニター (Default Monitor)」は
デフォルトのプロファイル・リソースであり、このプロファイル・セッションのデータを保管する際に使用します。
- 「プロファイル」をクリックします。
- 必要なプロファイル・リソースが作成され、エージェントおよびプロセスが「プロファイル・モニター」ビュー
に表示されます。
- 以下の画面取りに示されているとおり、「分散レイアウト」を選択してモニターの表示を使用可能にします。これによって、ワークベンチを稼働しているマシンだけでなく、データをグループ化したモニターが表示されます。

一定期間内の実行動作の表示
「実行フロー」ビューを使用して、アプリケーションの実行を検査できます。
このビューには、プログラム全体の実行が表示されます。ここで、時間は縦軸に示されます。
- 「プロファイル・モニター」ビューで、使用モニターを選択し、右クリックして
「アプリケーションから開く」>「実行フロー」と選択すると、「実行フロー」ビューが開きます。「実行フロー」ビューが開きます。
- 特定のメソッドを検査するには、該当するメソッド名 (またはその下の空白) をクリックして選択します。
すると、このメソッドで呼び出されたすべてのメソッドが黄色で強調表示されます。
強調表示されたエリアの縦の長さは、そのメソッドの基本時間を表します。
基本時間の正確な値は状況表示行に表示されます。

ビュー内のオブジェクトの上にカーソルを移動すると、ウィンドウの下部のステータス・バーに詳細情報が表示されます。
- 「ズームイン」ツール
を使用して、カーソルを有効にし、ポイントおよびクリックしてエリアを拡大します。
注: アプリケーションのモニター中にビューを更新するには、「ビューの最新表示」ボタン
をクリックします。
アクティブ・スレッドの識別
「実行フロー」ビューでは、スレッドごとにアクティビティーの期間があります。
この期間は、数多くのメソッド呼び出しをもとに識別されます。
シンボリックによる表現では、最初に呼び出されるメソッドはストライプで示され、
メソッドが続けて呼び出されると、そのストライプの右側に新たにストライプが追加されます。
メソッド呼び出しのシーケンスは左から右へと進行します。
この左から右への進行状況により、スレッドのアクティブな部分が識別できます。
メソッド呼び出しのシーケンスのアウトラインであるセクション全体を選択すると、
そのシーケンスの実行に要する基本時間が状況表示行に示されます。
スレッドがアクティブである基本時間は、以下の時間の差から調べます。
- 黄色い選択エリアの上部の水平線をポイントし、対応する基本時間を
状況表示行に表示します。
- 同様に、黄色い選択エリア (メソッド・シーケンスが活動中の実行期間を網羅します) の
底辺をポイントし、その時点の基本時間を表示します。
ヒント
- グラフが過密になって読み取りにくい場合は、そのエリアにズームイン
してください。
- メソッドを選択すると、このメソッドで呼び出されたすべてのメソッドが黄色で強調表示されます。
- ワークベンチ上でビューをドラッグ・アンド・ドロップして、必要に応じて
それらのビューを同時に配置できます。
- カーソルをポイントすると必ず、対応する基本時間が状況バーに示されます。
- ビューの表示をリセットするには、「ホーム」ボタンをクリックします。
呼び出し頻度の高いメソッドの識別
呼び出し頻度の高いメソッドは、以下の手順で識別します。
- ズーム・ツール
を
使用して、メソッド呼び出しのシーケンスを拡大します。
- 選択エリア内で、同色のストライプを探します。これらのストライプは、
同じクラス・インスタンスから複数回呼び出されたメソッドを識別します。
- 異なる色のストライプ (それぞれがメソッドを表す) の長さを確認します。
ストライプが長いほど、そのメソッドの実行時間は長いということになります。
ガーベッジ・コレクションの計測
通常、このビューのユーザー・スレッド内でストライプを調べることにより、
オブジェクトに対して行われたガーベッジ・コレクションを見分けることは不可能です。
以下の手順を実行してください。
- ガーベッジ・コレクションは、デフォルトで非表示になっています。これを使用可能にするには、ビューの「コンテキスト」メニューで「スレッド」>「GC」を選択します。
- このビュー内で一番左端にある列を確認します。この列は、
ガーベッジ・コレクション・スレッド用に予約されており、GC スレッド列と呼ばれます。
- GC スレッド列に、単一の細い長方形があることを確認します。この長方形は、
オブジェクトの大部分のメソッド呼び出しからかなり下方に配置されている可能性があります。
この長方形は、オブジェクトのガーベッジ・コレクションが行われるごとに、GC スレッド列に表示されます。
プログラム実行のフェーズの識別
初期化フェーズの識別
- ズームイン・ツール
を使用して、
メイン・スレッドの上部にあるメソッド呼び出しのシーケンスを拡大します。
- -init- とマークされたメソッドに注目してください。
- それらのメソッドをクリックして選択します。状況バーが更新され、
初期化におけるメソッド・ヘルプが表示されます (変数への値の割り当ては、
アプリケーションで使用されます)。
「メソッド呼び出し」ビューを使用したメソッドの分析
- 「プロファイル・モニター」から、モニターまたはエージェントのいずれかを選択します。
右クリックして、「アプリケーションから開く」>「実行フロー」と選択します。
「実行フロー」ビューが表示されます。
- 「実行フロー」テーブルで、調べるスレッドを展開します。
学習したいメソッドを選んで右クリックし、「メソッド呼び出しの表示」を選択します。
- ズームイン・ツール
を使用して、
表示のセクションを拡大します。クラス別に色分けされたストライプが、
メソッド呼び出しを表す水平線により接続されます。
- メソッド名をクリックしてメソッドを選択します。
- 「ビューの最新表示」ボタン
をクリックして
現行情報が表示されていることを確認します。
- 次の行に注目してください。

この行には、最初にメソッドの名前が、続いて n/m (全体の呼び出し回数 m 回のうち、
現在表示されている呼び出し回数 n 回) の呼び出しが表示されます。
- 「前へ」
および「次へ」
をクリックして、選択したメソッドのすべての呼び出し (または選択したオブジェクトに対する各メッセージ) を
ブラウズします。ツールバーは、表示している呼び出しを示すために、部分的に変更されます。
メソッドの呼び出し元の検索
メソッドの呼び出し元を調べるには、引き続き「メソッド呼び出し」ビューで、
以下の手順を実行します。
- メソッドの呼び出し元を表示するには、「呼び出し元の表示」ボタン
をクリックします。メソッドが、左側に呼び出し元が示された状態で表示されます。
- 表示した新しい呼び出しごとにメソッドの呼び出し元に関する詳細を表示するには、
ビュー内で呼び出し元を表すストライプの上にカーソルを置きます。
状況表示行に呼び出し元の情報が表示されます。
- T選択したメソッドが呼び出すメソッドを調べるには、
「呼び出し先のメソッドの表示」ボタン
をクリックします。
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.