この節では、プロファイラのグラフィカルユーザーインタフェースの機能と、これらの機能の使用方法について説明します。説明する内容は次のとおりです。
「Profiler Options」ダイアログは次のタブで構成されています。
これらのタブにあるオプションを使用して、どのオブジェクトのプロファイルを作成するか、およびどの要素をプロファイルに表示するかを指定します。
プロファイラのオプションを指定したら、「OK」をクリックしてプロファイラを起動します。プロジェクトの設定に応じて、プロファイラは 2 つの処理のどちらかを実行します。
通常の Identity Manager プロジェクトを「組み込み」の Identity Manager インスタンスで使用する場合、プロファイラは完全なビルドを実行して NetBeans アプリケーションサーバーに配備し、プロファイラを起動します。
通常の Identity Manager プロジェクトを「外部」の Identity Manager インスタンスで使用する場合、またはリモートの Identity Manager プロジェクトを使用する場合、プロファイラはそのプロジェクト用に設定されている Identity Manager インスタンスに接続します。
「IDM」>「Set Identity Manager Instance」を選択して、プロジェクトに対する Identity Manager インスタンスの動作を制御できます。
「Mode」タブには次のオプションがあります。
「IDM Objects Only」: フォーム、規則、ワークフロー、および XPRESS オブジェクトのプロファイルを作成する場合に選択します。Java オブジェクトはプロファイルから除外されます。
「Java and IDM Objects」: フォーム、Java、規則、ワークフロー、および XPRESS オブジェクトのプロファイルを作成する場合に選択します。
通常の Identity Manager プロジェクトを「外部」の Identity Manager インスタンスで使用する場合、またはリモートの Identity Manager プロジェクトを使用する場合、「Java and IDM Objects」オプションは使用できません。
プロファイラの実行中に「Mode」オプションを変更することはできません。オプションを変更するには、プロファイラを停止する必要があります。
「IDM Object Filters」タブには次のオプションがあります。
Show IDM Object details
Include Anonymous Sources
「匿名ソース」は、一時的に生成されるフォーム (またはフォームの一部) であり、Identity Manager リポジトリに常駐する持続的フォームとは対応しません。匿名ソースの例には、ログインフォームや MissingFields フォームがあります。
匿名ソースをスナップショットに含める場合は、このボックスを選択します。
匿名ソースをスナップショットから除外する場合は、このボックスの選択を解除します。
「Java Filters」タブは次の場合に選択します。
Java フィルタを含める、または除外する
新しいフィルタを作成する
既存のフィルタを削除する
デフォルトのフィルタを復元する
Java フィルタは、メソッドパターンの形で指定され、「正規メソッド名」に基づいて含めるか除外するかを示すパターンで表現されます。正規メソッド名は次のとおりです。
fully-qualified-class-name.method-name( parameter-type-1, parameter-type-2, ... )
コンストラクタの場合、method-name は <init> です。
次に、いくつかの例を示します。
すべてのコンストラクタを除外するには、「Exclude」ボックスを有効にし、次のフィルタを追加します。
*.<init>(*)
単一の org.w3c.dom.Element パラメータを持つすべてのコンストラクタを除外するには、「Exclude」ボックスを有効にし、次のフィルタを追加します。
*.<init>(org.w3c.dom.Element)
すべての Identity Manager クラスを除外するには、「Exclude」ボックスを有効にし、次のフィルタを追加します。
"com.waveset.*" "com.sun.idm.*"
カスタムコードだけを計測するには、「Exclude」ボックスを無効にし、最初の * include フィルタを削除してから、次のフィルタを追加します。
"com.yourcompany.*"
現在では、フィルタはカスタムクラスと Identity Manager クラスだけに適用されるため、最後の 2 つの例は等価です。
必要な場合は、build.xml の次の行を適切に編集すると、ほかの JAR を計測できます。次に例を示します。
<instrument todir="${lighthouse-dir-profiler}/WEB-INF" verbose="${instrumentor.verbose}" includeMethods="${profiler.includes}" excludeMethods="${profiler.excludes}"> <fileset dir="${lighthouse-dir}/WEB-INF"> <include name="lib/idm*.jar"/> <include name="classes/**/*.class"/> </fileset> </instrument> |
デフォルトの設定では、ユーザーのすべてのカスタムクラスとほとんどの Identity Manager クラスが含められます。いくつかの Identity Manager クラスは、有効にするとプロファイラで障害が発生するため、強制的に除外されています。
たとえば、ワークフロー、フォーム、および XPRESS の各エンジンのクラスは除外されています。そうしないと、プロファイラが Java および Identity Manager オブジェクトのプロファイルを作成する際に、理解不能なスナップショットが生成されます。
「Java Filters」では、「IDM Object Filters」よりはるかに詳細なフィルタリングが提供されます。Java 計測では、かなりのオーバーヘッドが実行時間に追加され、それによってプロファイリング結果が大幅に歪曲される可能性があります。Identity Manager オブジェクトはコンパイルされるのではなく解釈されるので、計測のオーバーヘッドは無視できるほどの大きさです。したがって、ワークフロー A を除外してワークフロー B を含めるなどには、基本的に理由がありません。
プロファイラの実行中に Java Filters を変更することはできません。Java Filters を変更する前に、プロファイラを停止する必要があります。
「Miscellaneous」タブには次のオプションがあります。
Prune snapshot nodes where execution time is 0:
実行時間がゼロのエンティティーも含め、実行されたすべてのエンティティーの呼び出し情報をスナップショットに含めるには、このオプションを無効にします (デフォルトで無効)。
実行時間が 0 のノードについても、呼び出し回数の情報が役立つことがあります。
このようなノードを削除するには、このオプションを有効にします。 この場合、もっとも関連のあるプロファイリングデータに焦点を当てることができます。また、このオプションを有効にすると、プロファイラのスナップショットサイズを大幅に節約できます。
Automatically Open Browser Upon Profiler Start:
プロファイラの起動時に、プロファイルを作成する Identity Manager インスタンスを指すブラウザを自動的に開くようにするにはこのオプションを有効にします (デフォルト)。
ブラウザを開かないようにするには、このオプションを無効にします。
Include Java Sources in Snapshot:
プロファイリングデータで参照されているすべての Java メソッドの Java ソースをスナップショットに含めるには、このオプションを有効にします (デフォルト)。フィールドでは常にこのスナップショットの設定を使用するようにしてください。カスタム Java は比較的小さく、その情報があるとサポートには大変役立ちます。
Identity Manager のプロファイルを作成する場合で、Identity Manager の完全なソースが利用可能なときだけ、このオプションを無効にします。
この場合、Identity Manager のソースを含めるとスナップショットがきわめて大きくなるので、それは望ましくありません。詳細は、「プロファイラがソースを見つけて管理するしくみ」を参照してください。
「IDM Profiler」ビューは次の領域で構成されています。
「Current Project」領域は、ユーザーの現在のプロジェクトを一覧表示するドロップダウンメニューで構成されています。このメニューを使用して、プロファイルを作成するプロジェクトを選択します。
「Controls」領域には、次の表で説明する 4 つのアイコンがあります。
アイコン |
名前 |
目的 |
---|---|---|
|
Start Identity Manager Profiler |
プロファイラを起動し、「Profiler Options」ダイアログを開きます。 |
|
Stop Identity Manager Profiler |
プロファイラを停止します。 |
|
Reset Collected Results |
この時点までに収集されたプロファイリング結果をすべてリセットします。 |
|
Modify Profiling |
「Profiler Options」ダイアログを再度開き、現在のプロファイリング結果を修正するために設定を変更できるようにします。 |
「Status」領域は、ホストに接続しているかどうかを報告し、プロファイラの起動時、実行中、および停止時にはステータス情報を表示します。
「Profiling Results」領域には、次の表で説明する 2 つのアイコンがあります。
アイコン |
名前 |
目的 |
---|---|---|
|
Start Identity Manager Profiler |
プロファイラを起動し、「Profiler Options」ダイアログを開きます。 |
|
Reset Collected Results |
この時点までに収集されたプロファイリング結果をすべてリセットします。 |
「Saved Snapshot」領域には、保存されているスナップショットの一覧が表示されます。
スナップショットを保存する手順については、「スナップショットの保存」を参照してください。
また、次のボタンを使用して、これらのスナップショットを管理することもできます。
Open: このボタンをクリックすると、保存されているスナップショットを「スナップショットビュー」ウィンドウで開くことができます。
「Saved Snapshot」リストでスナップショットをダブルクリックして、そのスナップショットを開くこともできます。
Delete: 「Saved Snapshot」リストでスナップショットを選択してからこのボタンをクリックすると、選択したスナップショットを削除できます。
Save As: リストでスナップショットを選択してからこのボタンをクリックすると、外部の任意の場所にスナップショットを保存できます。
Load: このボタンをクリックすると、任意の場所にあるスナップショットを「スナップショットビュー」ウィンドウで開くことができます。
スナップショットを開くと、Identity Manager IDE の右上にある「スナップショットビュー」ウィンドウに結果が表示されます。
スナップショットにはいくつかのデータビューがあり、これらについて次の節で説明します。
「Call Tree」ビューは、システム全体での呼び出し時間と呼び出し回数を表示するツリーテーブルで構成されています。
このツリーテーブルには、次の 3 つの列があります。
「Call Tree」列: すべてのノードを一覧表示します。
トップレベルのノードは次のいずれかです。
システムの各種バックグラウンドスレッドに対応する Thread.run() メソッド。
たとえば、Java プロファイリングを有効にした場合は、ReconTask.WorkerThread.run() メソッドが表示されます。
要求時間
たとえば、idm/login.jsp という URL を表示した場合は、idm/login.jsp に対応するトップレベルエントリが表示されます。このエントリに関して、「Time」列に表示されるデータはその要求の合計時間を表します。「Invocations」列に表示されるデータは、そのページに対する呼び出しの合計回数を表します。次に、そのデータをさらに詳細に調べて、どの呼び出しに時間がかかったかを確認できます。
「Call Tree」には「Self Time」ノードもあります。「Self Time」の値は、そのノード自体で消費された時間を表します。詳細は、「統計の警告」を参照してください。
「Time」列: 各ノードが親から呼び出されたときにそのノードで消費された時間を表示します。パーセント値は、親の時間に対する相対値です。
「Invocations」列: 各ノードが親から呼び出された回数を表示します。
「Hotspots」ビューでは、親にかかわらず集計された呼び出し時間が、フラット化されたノードリストに表示されます。
このビューには、次の列があります。
Self Time: 各ノードで消費された合計時間を表示します。
Invocations: 各ノードが親から呼び出された合計回数を表示します。
Time: 各ノードおよびそのすべての子で消費された合計時間を表示します。
「Back Traces」ビューでは、各ノードが呼び出されたすべての呼び出しチェーンが、逆転した呼び出しスタックに表示されます。
これらの統計を使用すると、そのノードから特定の呼び出しチェーンを削除した場合に、どれだけの時間が節約されるかがわかります。
「Back Traces」ビューにアクセスするには、ほかのスナップショットビューのいずれかでノード (「ルートノード」と呼ばれる) を右クリックし、ポップアップメニューから「Show Back Traces」を選択します。
「Back Traces」ビューの「Time」および「Invocations」のデータ値は少し意味が異なります。
Time: この列の値は、ルートノードが特定の呼び出しチェーンから呼び出されたときにそのノードで消費された時間を表します。
Invocations: この列の値は、ルートノードが特定の呼び出しチェーンから呼び出された回数を表します。
「Callees」ビューでは、親チェーンにかかわらず集められた、ノード (「ルートノード」と呼ばれる) の呼び出しツリーが表示されます。
これらの統計は、問題のある領域がマスター呼び出しツリー全体のさまざまな部分から呼び出されている場合に、そのノードの全体的なプロファイルを確認するのに役立ちます。
「Callees」ビューにアクセスするには、ほかのスナップショットビューのいずれかでノード (「ルートノード」と呼ばれる) を右クリックし、ポップアップメニューから「Show Callees」を選択します。
「Callees」ビューで使用される「Time」および「Invocations」のデータ値の意味は、「Call Tree」ビューで使用されるものと同じです。
「Call Tree」ビューまたは「Hotspots」ビューで任意のノードを右クリックすると、次の表に示すオプションがポップアップメニューに表示されます。
メニューオプション |
説明 |
---|---|
GoTo Source |
Java メソッド、ワークフロー、フォーム、規則、または XPRESS に対応するノードの XML ソースを表示する場合は、このオプションを選択します。このビューの詳細は、「プロファイラがソースを見つけて管理するしくみ」を参照してください。 |
Show Back Traces |
「Back Traces」ビューにアクセスする場合は、このオプションを選択します。このビューの詳細は、「「Back Traces」ビュー」を参照してください。 |
Show Callees |
「Callees」ビューにアクセスする場合は、このオプションを選択します。このビューの詳細は、「「Callees」ビュー」を参照してください。 |
Find In Hotspots |
「Hotspots」ビューでノードを検索する場合は、このオプションを選択します。このビューの詳細は、「「Hotspots」ビュー」を参照してください。 |
オプションを表示 > ソート > |
このオプションには次のいずれかを選択します。
|
オプションを表示 > 表示項目を変更 |
Call Tree または Hotspots のリストに表示される列を変更する場合は、このオプションを選択します。 「表示項目を変更」ダイアログが表示されたら、次のオプションを 1 つ以上選択できます。
|
「スナップショットビュー」ウィンドウの上部にある「検索」アイコン を使用すると、「Call Tree」ビューまたは「Hotspots」ツリーからノードを名前で検索できます。
あるいは、「Call Tree」ビューまたは「Hotspots」ビューで任意のノードを右クリックし、ポップアップメニューからそれぞれ「Find in Call Tree」または「Find in Hotspots」を選択すると、ノードを検索できます。
プロファイラには、スナップショットを保存するためのオプションがいくつか用意されています。これらのオプションについては、次の表を参照してください。
アイコン |
名前 |
目的 |
---|---|---|
|
「Save the Snapshot in the Project」アイコン (「スナップショットビュー」ウィンドウの上部にある) |
プロジェクトの nbproject/private/idm-profiler ディレクトリにスナップショットを保存します。プロジェクトに保存されているスナップショットは、「Profiler」ビューの「Saved Snapshot」セクションに一覧表示されます。 |
|
「Save the Snapshot Externally」アイコン (「スナップショットビュー」ウィンドウの上部にある) |
外部の任意の場所にスナップショットを保存します。 |
|
「Save As」ボタン (「Saved Snapshot」領域にある) |
外部の任意の場所にスナップショットを保存します。 |