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

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

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

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