Identity Manager ではチュートリアル (profiler-tutorial.zip) が用意されており、プロファイラを使用してフォーム、Java 規則、ワークフロー、および XPRESS のトラブルシューティングを行う方法の学習に利用できます。
チュートリアルを完了するには、次の手順を使用します。
「ファイル」>「新規プロジェクト」の順に選択します。
新規プロジェクトウィザードが表示されたら、次のように設定し、「次へ」をクリックします。
「Name and Location」パネルで次のフィールドに入力し、「次へ」をクリックします。
Project Name: プロジェクト名として Idm80 と入力します。
Project Location?: デフォルトの場所を使用するか、別の場所を指定します。
Project Folder?: デフォルトのフォルダを使用するか、別のフォルダを指定します。
「Identity Manager WAR File Location」パネルが表示されたら、Identity Manager 8.1 の war ファイルの場所を入力します。通常、このファイルを解凍すると、同じディレクトリに idm.war ファイルが作成されます。
「次へ」をクリックして「Repository Setup」パネルに進みます。
このパネルではデフォルト設定を変更する必要はないので、そのまま「完了」をクリックします。Identity Manager の出力ウィンドウに「BUILD SUCCESSFUL」というメッセージが表示されたら、プロファイラのチュートリアルファイルを抽出できます。手順については、「手順 2: プロファイラチュートリアルの解凍」を参照してください。
profiler-tutorial.zip をプロジェクトルートに解凍します。抽出されるファイルには次のものがあります。
<project root>/custom/WEB-INF/config/ProfilerTutorial1.xml <project root>/custom/WEB-INF/config/ProfilerTutorial2.xml <project root>/src/org/example/ProfilerTutorialExample.java <project root>/PROFILER_TUTORIAL_README.txt
プロファイラを起動します。「手順 3: プロファイラの起動」に進みます。
「開始する前に」で説明されている手順を使用して、サーバーおよび Netbeans JVM のメモリーを増設します。
「概要」で説明されているいずれかの方法で、プロファイラを起動します。
「Profiler Options」ダイアログが表示されたら、プロファイリングオプションを指定できます。
「手順 4: プロファイラオプションの設定」に進みます。
その他のプロファイラオプションの詳細は、「プロファイラオプションの指定」を参照してください。
このチュートリアル用には、次のプロファイラオプションを指定します。
「Mode」タブで「Java and IDM Objects」を選択して、フォーム、Java、規則、ワークフロー、および XPRESS オブジェクトのプロファイルを作成することを指定します。
「Java Filters」タブを選択します。
次の手順を使用して、カスタム Java クラス (ここでは org.example.ProfilerTutorialExample) を除くすべての Identity Manager Java クラスを無効にします。
「了解」をクリックしてプロファイラを実行します。
プロジェクトではじめてプロファイラを実行する場合や、プロジェクトのクリーンアップ操作を最近実行した場合は、プロファイラの処理の完了に数分かかります。
処理が完了すると、ログインを求めるプロンプトが表示されます。
パスワード configurator を入力し、「Remember Password」ボックスを選択してから、「了解」をクリックして続行します。
Identity Manager ウィンドウが表示されたらログインします。
通常は、再度 configurator としてログインするのではなく、別のユーザーで Identity Manager にログインするようにしてください。Identity Manager セッションプールで使用できるのは 1 ユーザーにつき 1 つのエントリだけですが、すでに Configurator としてプロファイラにログインしています。複数のエントリを使用すると、セッションプールの表示が壊れ、パフォーマンスの問題をより詳細に調査するためのプロファイリング結果が歪曲される可能性があります。
ただし、この単純な例では、セッションプールは重要でないので、configurator/configurator としてログインしてかまいません。
Identity Manager で、「サーバータスク」>「タスクの実行」を選択し、ProfilerTutorialWorkflow1 をクリックします。
チュートリアルが応答するまでに少し時間がかかることがあります。
この時点でスナップショットを作成することもできますが、ここでは結果をリセットし、プロファイラを実行し、プロファイラを再度実行してから、スナップショットを作成します。
スナップショットを作成する前に、すべてのキャッシュの準備が完了したこと、すべての JSP がコンパイルされていることなどを確実にするために、プロファイラを数回実行することが最良の方法です。
プロファイラを数回実行することで、実際のパフォーマンスの問題に焦点を当てることができます。この方法が推奨されないのは、キャッシュ自体の生成に問題がある場合だけです。
Identity Manager IDE で 「IDM Profiler」ビューに戻ります。「Profiling Results」セクション (または「Controls」セクション) の「Reset Collected Results」アイコン をクリックして、この時点までに収集された結果をすべてリセットします。
Identity Manager で、「サーバータスク」>「タスクの実行」を再度選択し、ProfilerTutorialWorkflow1 をクリックします。
処理ダイアグラムが表示されたら、Identity Manager IDE に戻り、「Profiling Results」セクションの「Take Snapshot」をクリックします。
Identity Manager IDE でユーザーのスナップショットがダウンロードされ、結果がウィンドウの右側に表示されます。
この領域が「Call Tree」ビューです。呼び出しツリーの最上部に /idm/task/taskLaunch.jsp が表示され、「Time」列に時間が表示されます。その時間は、要求全体に 6 秒強かかったことを示しています。
/idm/task/taskLaunch.jsp ノードを展開すると、ProfilerTutorialWorkflow1 に 6 秒かかったことがわかります。
ProfilerTutorialWorkflow1 ノードを展開します。activity2 に 4 秒、activity1 に 2 秒かかっています。
activity2 を展開します。
action1 に 2 秒、action2 に 2 秒かかっています。
action1 を展開すると、<invoke> にも 2 秒かかったことがわかります。
<invoke> をダブルクリックすると、ProfilerTutorialWorkflow1.xml が開き、次の行が強調表示されます。
<invoke name=’example’ class=’org.example.ProfilerTutorialExample’/> |
ProfilerTutorialExample メソッドの呼び出しに 2 秒かかったことがわかります。
実際には、プロジェクト内のソースではなく、スナップショットに取り込まれた XML ソースを参照しています。スナップショットには必要なものがすべて含まれています。詳細は、「プロファイラがソースを見つけて管理するしくみ」を参照してください。
「CPU:<date><time>」タブを選択して、スナップショットに戻ります。
<invoke> ノードを展開すると、プロファイラが ProfilerTutorialExample.example() Java メソッドで 2 秒消費したことがわかります。
メソッド名をダブルクリックすると、ProfilerTutorialExample.java ソースが開き、次の行が強調表示されます。
Thread.sleep(2000); |
ここに問題があります。このメソッドには 2 秒のスレッドスリープが含まれています。
Call Tree に戻ると、2 秒のパスはすべてこのメソッドにつながっていることがわかります。3 つのパスがあり、合計 6 秒になっています。
「Call Tree」領域の下部にある「Hotspots」タブを選択して、「Hotspots」ビューを開きます。ProfilerTutorialExample.example() の合計セルフタイムは 6 秒になっています。
「Hotspots」の詳細は、「「スナップショットビュー」の操作」を参照してください。
ProfilerTutorialExample.example() を右クリックし、ポップアップメニューから「Show Back Traces」を選択します。
領域の下部に、新しい「Back Traces」タブが表示されます。
「Back Traces」タブで ProfilerTutorialExample.example() ノードを展開すると、このメソッドが 3 箇所から呼び出されたことと、各箇所からの呼び出しに 2 秒かかったことがわかります。
「Back Traces」の詳細は、「「スナップショットビュー」の操作」を参照してください。
「Save the snapshot in the project」アイコンをクリックして、スナップショットを保存して閉じます。
「IDM Profiler」タブの「Saved Snapshot」セクションを確認すると、このスナップショットが表示されるはずです。場合によっては、スクロールダウンする必要があります。
保存したスナップショットを選択し、「Open」をクリックして再度開きます。
「Save As」ボタンを使用するとスナップショットを外部に保存でき、「Load」ボタンを使用するとプロジェクト外部からスナップショットを読み込むことができます。
スナップショットをふたたび閉じます。
このチュートリアルの次の部分では、ワークフロー ManualAction のプロファイルを作成する方法を示します。
Identity Manager で、「サーバータスク」>「タスクの実行」を選択し、ProfilerTutorialWorkflow2 をクリックします。
しばらくすると、空のフォームが表示されます。
「保存」をクリックすると、処理ダイアグラムが表示されます。
「サーバータスク」>「タスクの実行」を再度選択します。
Identity Manager IDE の「IDM Profiler」ビューに戻り、「Profiling Results」セクションの「Reset Collected Results」アイコンをクリックします。
Identity Manager で ProfilerTutorialWorkflow2 をクリックします。
空のフォームが再度表示されたら、「保存」をクリックします。
「IDM Profiler」ビューで、「Take Snapshot」をクリックします。
数秒後、「Call Tree」領域にスナップショットが表示されます。/idm/task/workItemEdit.jsp に 6 秒強かかったことがわかります。この結果は、ワークフローでの手動操作に対応します。
/idm/task/workItemEdit.jsp ノードを展開すると、ManualAction フォーム内のすべての Derivations の実行に合計 6 秒かかったことがわかります。
Derivation、displayNameForm、variables.dummy、および <block> ノードを展開します。
<block> に 6 秒かかったことと、その時間のうちで ProfilerTutorialExample.example() メソッドの 3 回の呼び出しにそれぞれ 2 秒かかったことがわかります。
<block> をダブルクリックすると、ソースを表示できます。