Identity Manager のパフォーマンスを最適化するための推奨は、次の領域に分かれています。
通常は、次のとおり実行すると Identity Manager のパフォーマンスを最適化できます。
トレースを無効にする (Java クラス、userform、ワークフローのトレースなど)。トレースによって、かなりのオーバーヘッドが追加されます。
Identity Manager 内蔵の監査ログの管理タスクとシステムログの管理タスクを実行して、ログレコードの有効期限を設定する。ログレコードは際限なく増えてしまうことがあるため、これらのタスクを使用してリポジトリデータベースが空きスペースを使い切ってしまうことを防ぎます。詳細は、『Sun Identity Manager 8.1 ビジネス管理者ガイド』を参照してください。
Identity Manager の更新 (以前は サービスパック または インストールパック と呼ばれていました) に含まれている README ファイルをチェックして、製品にパフォーマンス改善が施されていないか調べる。改善が施されていれば、アップグレードを計画します。
Identity Manager リポジトリなど、1 台以上のリモートシステムからデータを取得する際のパフォーマンスの影響を考慮する。
Identity Manager を実行中のアプリケーションサーバーのインスタンス数を同一サーバー上で、またはサーバーを追加して増やし、負荷分散ツールを使用してインスタンス間に要求を分散させる。
バイナリ属性で参照されているファイルのサイズをできる限り小さく保つ。たとえば極端に大きいグラフィックファイルを読み込むと、Identity Manager のパフォーマンスが低下することがあります。
たとえばリファクタリングを行なって重複を抑え、メモリーを効率的に活用し、システム全体のパフォーマンスに対する影響を軽減するような、堅牢で理解しやすい XML コードを記述する。
イベントをリアルタイムに追跡するよう、Identity Manager のシステム監視を設定する。
これらのイベントはダッシュボードグラフに表示されるため、システムリソースをすばやく評価して異常を見つけ、時刻や曜日などを基にこれまでのパフォーマンスの傾向を把握することで、監査ログを調べる前に問題を対話的に特定することができます。計器盤では監査ログほど詳細がわかりませんが、ログのどこを見れば問題が見つかるかのヒントがわかります。
計器盤の詳細は、『Sun Identity Manager 8.1 ビジネス管理者ガイド』の第 8 章「レポート」を参照してください。
同期はバックグラウンドタスクであるため、Active Sync アダプタ設定によってはサーバーのパフォーマンスが影響を受ける可能性があります。
Active Sync アダプタの管理には、「リソース」リストを使用します。Active Sync アダプタを選択し、「リソースアクション」リストの「同期」セクションから処理を制御する実行、停止、ステータス更新を利用してください。
Active Sync アダプタのパフォーマンスを向上するには、次のとおり実行します。
実行中の動作の種類に応じて、ポーリング間隔を評価して調節します。
ポーリング間隔は、Active Sync アダプタが新しい情報の処理を開始する時期を決定します。たとえば、アダプタがデータベースから多数のユーザーのリストを読み込み、毎回 Identity Manager の全ユーザーを更新する場合、この処理を毎日早朝に実行することを検討してください。アダプタによっては処理する新しい項目を即座に検索するため、毎分実行するよう設定できるかもしれません。
リソースの同期ファイルを編集し、アダプタの実行先ホストを指定します。
多くのメモリーと CPU サイクルを必要とする Active Sync アダプタを専用サーバーで実行するように設定すると、システムの負荷を分散させることができます。
適切な管理者権限があれば、Active Sync リソースを変更して Active Sync アダプタを無効にしたり、手動または自動的に開始したりできます。
アダプタを自動に設定すると、アプリケーションサーバーを起動したときにアダプタが再起動します。アダプタを開始すると、アダプタは指定のポーリング間隔で即座に実行されます。アダプタを終了すると、次回アダプタが終了フラグを調べたときに終了します。
同期ログから取り込まれた詳細レベルを調節します。
同期ログは、現在処理中のリソースに関する情報を取り込みます。それぞれのリソースには、独自のログファイル、パス、およびログレベルがあります。アダプタログから取り込まれる詳細の量は、指定したログレベルに応じて変わります。この値は、該当するユーザータイプ (Identity Manager または サービスプロバイダ) の「同期ポリシー」の「ログ設定」セクションから指定します。
一括ロード操作中のパフォーマンスを向上させるには、次のとおり実行します。
たとえば Active Sync、一括動作、調節などの一括処理動作の処理時間を改善するため、承認サブプロセスへの呼び出しを削除して、デフォルトのワークフローを単純化します。
管理者に割り当てられているユーザーフォームをできる限り単純化します。たとえば、次のようにします。
データのロードにフォームを作成する際、データ表示のためのコードがあれば削除します。
一括追加操作を使用する場合は、firstname や lastname といった基本属性が CSV ファイルに定義されていることを確認します。次に、管理者ユーザーフォームからこれらの属性を削除します。
Identity Manager に用意されているデフォルトのフォームは変更しないでください。代わりに、そのフォームのコピーを作り、そのコピーに一意の名前を付け、この名前を変更したコピーの方を変更します。この方法により、アップグレード中でも製品アップデート中でもカスタマイズしたフォームが上書きされなくなります。
フォームの作成方法と編集方法の詳細は、『Sun Identity Manager Deployment Reference』の第 2 章「Identity Manager Forms」を参照してください。
次の機能を、NIS (ネットワーク情報サービス) 実装先の配備環境に実装します。
user_make_nis という名前のアカウント属性をスキーママップに追加し、この属性を調整やその他の一括プロビジョニングワークフローで使用します。この属性を追加した場合、リソース上の各ユーザーが更新された後は、システムで NIS データベースへの接続手順がバイパスされます。
プロビジョニングが完了してから NIS データベースに変更内容を書き込むには、ワークフローに NIS_password_make という ResourceAction を作成します。
設定可能な XML オブジェクトを使用すると、広範囲のユーザーインタフェース仕様が利用でき、タスクごとにユーザーへのデータ表示方法を定義したり、複雑な業務プロセスを自動化したりできるようになります。ただしこの柔軟性は、効率、パフォーマンス、および信頼性に影響を与えることがあります。
ここでは、フォーム、ルール、およびワークフローから構成される、Identity Manager の設定可能な XML オブジェクトをチューニングする際のガイドラインをいくつか説明します。これらの情報は、次のように構成されています。
実行中タスクのビューや変数コンテキストと相互に作用するインタフェースを定義するには、Identity Manager のフォームを使用します。フォームには、データ要素のセットにビジネスロジックと変換ロジックに使用する実行コンテキストがあります。各種タスクを実行する非常に強力で動的なフォームを作成できるとはいえ、フォームの複雑さを抑えれば効率が上がります。
次に、カスタマイズしたフォームのパフォーマンスを向上させる方法をいくつか説明します。
Identity Manager の新しいフォームを設計する際、システムインテグレーターは次の手順に従えばフォームのパフォーマンスを最適化できます。
管理者フォームのパフォーマンスを向上させるには、次の項目を実行します。
TargetResources を指定して、特定のリソースのみを取得して編集します。(詳細は、「ワークフローのチューニング」を参照してください。)
FormUtil.getResourceObjects または FormUtil.listResourceObjects を使用している場合は、変更頻度の低いオブジェクトに cacheList と cacheTimeout のキャッシュパラメータを使用します。
時間の掛かる計算とフェッチの結果は <Field> 要素に格納し、<Default> にある式で評価することで、演算が一度だけ行われるようにします。
update.constraints を使用して、実行時に取得されるリソースを制限します (『Sun Identity Manager Deployment Reference』の「Dynamic Tabbed User Form」を参照してください)。
バックグラウンドの承認を使用 (ManualAction の各所有者に 1 秒のタイムアウトを設定) して、ページ送信の高速化を図ります。
選択したパネルにかかわらず、ページの再読み込み時に Identity Manager が「タブパネルフォーム」のすべてのパネルに定義されているすべてのフィールドを必ず更新するようにしてください。
エンドユーザーフォームのパフォーマンスを向上させるには、次の項目を実行します。
TargetResources を使用して、ビューのチェックアウトを対象となるリソースアカウントのものだけに制限します。これにより、ビューのフェッチ時間が短縮され、TaskInstance と WorkItems で消費されるメモリーが少なくて済むようになります。
Identity Manager のユーザーオブジェクトのビュープロパティーと属性だけが対象となっている場合、WSUser を返す際に Session.getObject(Type, name) の使用を検討します (複数の延期タスクのトリガーの管理に役立ちます)。
通常はエンドユーザーのタスクの方がプロビジョニングタスクよりも WorkItems が多いため、エンドユーザーのタスクはWorkItem サイズに特に影響を受けやすくなります。
「ビュー」をチェックアウトして構築し、編集したあとでビュー全体にマージし直してチェックインする際には、一時的な汎用オブジェクトを使用することを検討します。
デフォルトの「ユーザーの作成」と「ユーザーの編集」インタフェースを使用する代わりに、スケーラブルフォームを使用するようにします。
ユーザーを編集する際にデフォルトのユーザーフォームを使用すると、ユーザーのアカウントを編集し始めた時点で Identity Manager はそのユーザーが所有しているリソースを取得します。多数のリソースを抱えるユーザーアカウントがある配備環境では、この時間の掛かりがちな操作によってパフォーマンスが低下する危険性があります。
フォームで実行される動作の中には、Identity Manager 外部のリソースを呼び出すものがあります。特にグループリストや電子メール配信リストのコンパイルなど、結果の値が長いリストになるような外部リソースへのアクセスは、Identity Manager のパフォーマンスに影響を与えることがあります。
このような呼び出し中のパフォーマンスを向上させるには、『Sun Identity Manager Deployment Reference』の「Java クラスを使用したフィールドデータの取得」のガイドラインに従ってください。
また、<Disable> 式のようなパフォーマンスに影響を受けやすい式で JavaScriptTM を使用するのは避けてください。組み込まれたトレース機能を使用する場合は、短い XPRESS 式の方がデバッグしやすいです。ワークフローアクションの複雑なロジックには JavaScript を使用します。
フォームの表示速度が低下した場合、debug/Show_Timings.jsp ページで問題を見つけ出すことができます。Formconvert.convertField() への呼び出しを探してください。これで、フィールドごとにその値の計算にどれくらい時間が掛かっているかがわかります。
Identity Manager ルールを使用して、本製品の中でフォームやワークフローなど設定可能なコンポーネントで再利用できる定数と XPRESS ロジックをカプセル化します。
ルールを記述する際は、最適なパフォーマンスを得られるよう、必要に応じて次のガイドラインを使用してください。
定数値を返すには、静的な宣言を使用します。
増分された値や一度だけ参照される値には、defvar メソッドを使用して一時的な値でアルゴリズムを実装します。
複数回返すべき値がある複雑で負荷のかかる計算には、putmap、setlist、または setvar メソッドを使用します。最終的には値を <null> に設定します。
さまざまな人的および電子的タッチポイントを使用した複雑な業務処理を、使いやすく自動化できるように Identity Manager のワークフローをカスタマイズします。
カスタムのワークフローのパフォーマンスを向上させるには、次の方法に従ってください。
処理時間を改善するため、承認サブプロセスへの呼び出しを削除して、デフォルトのワークフローを単純化します (特に、Active Sync、一括動作、調節などの一括処理動作)。
ワークフロー内に無限ループがないことを確認します。特に、承認サブプロセス内にあるループで、ブレークフラグが更新され適切に確認されるようにします。
複数回同じオブジェクトのリポジトリを参照する必要がある場合は、取得したオブジェクトを後から使用できるよう変数に置きます。
Identity Manager はすべてのオブジェクトをキャッシュしないため、変数の使用が必要です。
WorkflowServers の checkoutView の TargetResources オプションで、アカウント情報のクエリー対象となるリソース数を制限します。
アカウント情報のクエリー対象となるリソース数を制限する方法については、次の例をご覧ください。
<Argument name=’TargetResources’> <list> <string>resource name[| #]</string> </list> </Argument> |
上の例の [| #] は、特定のリソースに複数アカウントがあるときに使用できるオプションのパラメータです。たいていの場合、リソース名で十分です。
フォームで残った不要なビュー変数を消去します。特に大きなマップとリストを消去します。たとえば、次のようにします。
<setvar name=’myLargeList’></null></setvar>
このビューは、TaskInstance オブジェクトで複数回コピーされるため、大きなビューでは TaskInstance とそれに対応する TaskResult のそれぞれのサイズが著しく増加します。
完了したタスクをすぐに廃棄するよう、TaskDefinition の resultLimit (数秒内) を使用するか、タスク実行中のこのオプションを設定します。TaskInstances の数が多いと、次に影響が出ます。
フッター内の taskResults.jsp と管理者インタフェース内の JSPTM タスクの表示方法
JSP タスクの表示方法
タスク名を変更する際の TaskInstance ごとのクエリー
データベースのサイズ
次のオプションを必要に応じて設定します。
(選択を推奨) delete — 新しいタスクの実行が開始される前に、同一名の古い方の TaskInstance を削除します。
wait — 古い方の TaskInstance が削除されるか resultLimit に達して期限が切れるまで、現在の TaskInstance を一時停止します。
rename — 命名が競合しないように、TaskInstance 名にタイムスタンプを挿入します。
terminate — 同一名の古い方の TaskInstance を削除します。現在実行中の同一名の TaskInstance がそれぞれ中止されます。
WorkItems (ワークフロー内では ManualActions と表示されています) の数とサイズによって、メモリーとシステムパフォーマンスが著しく影響を受けることがあります。デフォルトでは、WorkItem に Identity Manager が全体ワークフローのコンテキストをコピーしてから、送信後にこのワークフローコンテキストを書き戻します。
WorkItems と ManualActions のパフォーマンスを向上させるには、次の手順に従ってください。
WorkItems のサイズを減らします。
デフォルトでは、ManualAction が WorkItem を作成してから、そのタスクコンテキストのそれぞれの変数を WorkItem.variables にコピーします。タスクコンテキスト変数を制限すると、並列承認から上書きされなくなります。
WorkItem へコピーし直される変数を制限するには、ExposedVariables を使用します。たとえば、次のようにします。
<ExposedVariables><List><String>user ...
WorkItem から実行中のタスクへ解析し直される変数を制限するには、EditableVariables を使用します。たとえば、次のようにします。
<EditableVariables><List><String>user ...
承認フラグ、フォームボタンの値、および実際の承認者名を必ず含めてください。
確認ページとバックグラウンド処理を変更し、ユーザーインタフェースの応答時間を向上させます。
設定プログラムなどの別ユーザーが所有している、確認の ManualAction またはバックグラウンドの ManualAction を作成します。
タスクが実行されて WorkItems が削除されてからユーザーがアクションを送信する場合にエラーメッセージが表示されないようにするには、timeout=’-5’ (5 秒) と ignoreTimeout=’true’ を設定します。
値のマップやリストなどの大きな属性値を送信時に null に設定してメモリー使用を最適化します。または、スコープからすばやく排出されるようにそれらを Activity スコープ指定変数としてインスタンス化します。
完了したタスクの有効期間を短くします。
各 WorkItem に Timeout を指定してそのワークフローが Timeout を WorkItem ごとに予測するようにして、デッドエンドのタスクがなくなるようにします。
タスク完了後のスケジューラによるタスクの処理方法がわかるよう、TaskDefinition の resultLimit と resultOption オプションを使用するようにします。
resultLimit を使用して、タスク完了後のタスクの有効期間を秒単位で制御します。デフォルトのサイズはゼロ (0) です。つまり、タスク完了後にタスクインスタンスが即時削除されます。
resultOption を使用して、タスクの繰り返しインスタンスが開始されたときに行うべき動作を指定します (wait、delete、rename、または terminate など)。デフォルトは delete です。
正常に完了したタスクを即時削除するとはいえ、デバッグできるまでエラーを含むタスクを残しておくには、条件付きで完了したタスクを削除することもできます。
TaskDefinition の resultLimit に、問題をデバッグするのに十分な期間を設定します。WorkflowServices 呼び出し後に、実行時にエラーが何も報告さければ(WF_ACTION_ERROR が <null/> など)、resultLimit を 0 (または 小さい値) に設定できます。
うまくスコープ指定されていない変数を評価して修正します。次のように、宣言された場所に応じて変数をスコープ指定します。
Global 変数は、多くの動作 (ケース所有者やビューなど) に使用され、サブプロセス内で承認フラグとして使用されるべき値です。
<TaskDefinition> の要素として宣言されている変数があれば、その変数をグローバルにスコープ指定してください。external に宣言されている変数があれば、その値はスタックの呼び出し時に解決されます。
負荷の掛かる値の Activity 変数 (リソースのフェッチを必要としたり、大きなリストやマップの値を格納する Activity 変数など) が、WorkItem で参照されることがあります。
<Activity> 要素として宣言されている変数があれば、その変数を Activity 内の動作と遷移要素に表示されるようにします。
Identity Manager Version 2005Q3M1 SP1 以降は、WorkItem の作成に値がコピーされないよう、ワークフローではなくフォームに <Activity> 変数値を使用してください。
Activity 変数は、遷移ロジックで使用される値です。
<Action> の要素として宣言されている変数があれば、動作の完了時にその変数がスコープを配るはずです。Action 変数は通常、アプリケーションから設定された変数名 (View -> User など) を「変更」するために WorkflowApplication の呼び出しで使用されます。
ウィザードのワークフローの最終ページには、同期実行 (syncExec='true') を指定しないでください。
true に設定すると、ユーザーがタスクを実行したときに、そのタスクが完了するまで実行されます。そのタスクが完了するか、別の停止点 (別の ManualAction など) に達するまでインタフェースがハングしてしまいます。
不要な承認チェックを削除します。
Active Sync には、viewOptions.Process から指定されたシステム指定のプロビジョニングタスクの代わりに、能率的なプロビジョニングタスクを使用します。
Identity Manager に用意されているプロビジョニングタスクは変更しないでください。
(リストされていないタスクである限り、) タスクを新規作成してから、フォームと処理マッピング構成の中でそのタスクを指定します。
データベース管理者の場合、頻繁に統計を実行してリポジトリデータベースを監視しているはずです。
パフォーマンス問題は、データベーステーブルの統計が悪いか抜けている場合によく起こります。この問題を解決すれば、データベースと Identity Manager パフォーマンスの両方のパフォーマンスが向上します。
詳細は、次の Oracle 記事を参照してください。
最適なクエリー計画を選択するもう一つの方法として、SQL プロファイルを使用するようにします。パフォーマンスの悪い SQL を特定する際には、Enterprise Manager から SQL Advisor を使用してこれらのプロファイルを作成します。
データエクスポータを使用すると、Identity Manager の新規データ、変更データまたは削除データを、レポート作成と解析作業に適した外部のリポジトリにエクスポートできるようになります。実際のエクスポートデータはバッチで行われます。ここで、エクスポート対象となる各種データが独自のエクスポート周期を指定できます。Identity Manager リポジトリに付属しているエクスポート対象のデータと、エクスポート周期の長さと変更されるデータ量にもよりますが、エクスポートされるデータ量は大きくなりがちです。
Identity Manager のデータ型の中には、後からエクスポートできるように、特殊なテーブルのキューに入れられるものがあります。具体的に言うと、WorkflowActivity と ResourceAccount データがキューに入れられます。こうしないとこのデータが持続しないためです。型に加えられたすべての変更点をウェアハウスで監視する必要があったり、TaskInstance や WorkItem データなど、エクスポート周期に対応しないライフサイクルの型があると、どの持続性のデータ型でもキューに入れられることもあります。
パフォーマンスを最大限に高めるには、ウェアハウスで必要なデータ型だけをキューに入れてエクスポートしてください。データエクスポートはデフォルトで無効になっていますが、データエクスポートを有効にすると、すべてのデータ型がエクスポートされます。不要なデータ型はすべて無効にしてください。
エクスポートタスクがデータをエクスポートする際、このタスクは複数スレッドを使用して、できる限り多くのスループットを達成するためにエクスポートを一刻も早く完了しようとします。Identity Manager リポジトリとウェアハウスの入出力速度にもよりますが、export タスクが Identity Manager サーバーのプロセッサを完全に占有し、これが対話式パフォーマンスが低下する原因になります。できればエクスポートは、エクスポートタスクに専用のマシンで実行するか、少なくともそのマシンに対話式処理がない期間に実行するようにします。
エクスポートタスクでサポートしているチューニングパラメータは、次のとおりです。
読み取りブロックサイズのキュー化
書き込みブロックサイズのキュー化
排出スレッドカウントのキュー化
排出スレッドカウントは、最も需要なスループットです。キューテーブルに多数のレコードがある場合、(最大 24 まで) スレッド数を増せばスループットが高まるようになります。ただし、そのキューがある種のレコードに占有されていると、実際に高速化できる排出スレッドは少なくなります。エクスポートタスクは、割り当てできるスレッドのセット数までキューテーブルの中身を分けて、それぞれのスレッドに排出対象のセットを入れようとします。これらのスレッドには、ほかのリポジトリテーブルを排出している排出スレッドも含まれます。
静的な XMLObject 宣言を可能な限り使用すれば、一般的な XML を最適化できることがよくあります。たとえば、以下を使用します。
<list> の代わりに <List>
<s> の代わりに <String>
<map> の代わりに <Map><MapEntry ...></Map>
また、コンテキストにもよりますが、<o></o> 要素の代わりにラップオブジェクトを使用するようにします。
Identity Manager の計器盤グラフを使用すると、SunTM Identity Manager サービスプロバイダ (サービスプロバイダ) の現在のシステムを評価し、異常を見つけ、これまでの傾向を理解することができます (時間枠内の並列ユーザーやリソースの動作など)。
サービスプロバイダ には、管理者インタフェースがありません。Identity Manager の管理者インタフェースから、管理者タスクのほぼすべてを実行してください (計器盤グラフなど)。
サービスプロバイダ のチューニングの詳細は、『Sun Identity Manager Service Provider 8.1 Deployment』を参照してください。
Identity Manager の Web インタフェースを使用している場合は、Identity Manager に同梱されている OpenSPML ツールキットでパフォーマンスを最適化できます。
openspml.jar ファイルを http://openspml.org/ の Web サイトから使用すると、メモリーリークが起こります。
大きな初期ユーザーのロード中にパフォーマンスを向上させるには、次の項目を実行します。
Identity Manager の管理者インタフェースから、すべての監査イベントを無効にします。
監査ロギングを使用すると操作ごとに複数のレコードが追加され、それ以降の監査レポートの実行速度が低下することがあります。
「設定」->「監査」の順に選択します。
「監査の設定」ページで、「監査を有効にする」ボックスの選択を解除して「保存」をクリックします。
Web サーバをシャットダウンしてリストキャッシュを無効にするか、(debug/Show_WSProp.jsp デバッグページにある) ChangeNotifier.updateSearchIntervalCount プロパティーを 0.. に変更して、リストキャッシュを無効にします。
リストキャッシュには、メモリー内で頻繁にアクセスされる組織内のユーザーリストが保持されています。これらのリストを保持するため、リストキャッシュは新規作成されたユーザーを探して確認します。
debug/ Clear_List_Cache.jsp ページにある最新のリストキャッシュを消去します。
ユーザーの処理に使用されるワークフローに、承認が記載されていないことを確認します。
次のように、代替となるロード方法を使用します。
ロードを分割し、そのデータをゾーンで実行する。
より高速な一括ロードを使用する。
ファイルからロードを行う。
WorkflowActivity 型のデータエクスポータを無効にします。
Java コマンドラインへの最大ヒープサイズと最小ヒープサイズを追加して、必要メモリーを定め、アプリケーションサーバーの JVM に値を設定します。たとえば、次のようにします。
java -Xmx512M -Xms512M
パフォーマンスを向上させるには、次の項目を実行します。
最大と最小のヒープサイズの値に同じ値を設定します。
調整を行う場合は、お客様固有の実装に応じてこの値を増やしても構いません。
パフォーマンスチューニングの目的上、次を waveset.property ファイルに設定することもできます。
max.post.memory.size value
max.post.memory.size は、ディスクへスプールせずに (たとえば HTML FileSelect コントロールで) 送信されたファイルに含まれている最大バイト数を指定します。一時ファイルへの書き込み権がない場合は、max.post.memory.size を増やして、ディスクへスプールしないようにします。デフォルト値は 8K バイトです。
システム要件の詳細は、『Sun Identity Manager 8.1 リリースノート』を参照してください。
SolarisTM と Linux オペレーティングシステムのカーネルのチューニングの詳細は、『Sun Java System Application Server Enterprise Edition Performance Tuning Guide』の「Tuning the Operating System」の章を参照してください。
Oracle オペレーティングシステムのカーネルのチューニングについては、Oracle システムに付属の製品マニュアルを参照してください。
ビューのプロビジョニングを処理する際のパフォーマンス問題は、ネットワーク遅延に原因があることがよくあります。個々のリソースアダプタをトレースすれば、何がパフォーマンス問題の原因になっているかがわかりやすくなります。
プロビジョニングツールのパフォーマンスを向上させるには、次の項目を実行します。
Waveset.properties ファイルの provisioner.maxThreads を設定して、リソース処理ごとにスレッドが起動しているような、スレッドをプロビジョニングしている同時アカウントの数を制御します。
通常、この値を 10 に設定すると最適なパフォーマンスを達成できます。20 を超える値を指定すると、プロビジョニングツールのパフォーマンスが著しく低下します。
Waveset.properties ファイルの割り当て設定を行い、指定タスクにユーザーが実行できる並列処理 (再プロビジョニングなど) の数を制御します。並列動作の数を増やすと、より多くの処理が高速に完了できるようになりますが、一度に多すぎる動作を処理しようとするとボトルネックの原因になりかねません。
設定セットは、プール単位で作成できます。たとえば、設定 A、設定 B、設定 C を作成する場合、TaskDefinition (ワークフロー) 作成する際に、定義済みの設定から特定のプール設定をワークフローに割り当てられます。
次の例は、1 つの再プロビジョニングタスクを一度に実行するユーザーのバイナリオブジェクト (BOB) を制限する、割り当て設定を示したものです。
Quota.poolNames=ReProvision,Provision Quota.pool.ReProvision.defaultLimit=1 Quota.pool.ReProvision.unlimitedItems=Configurator Quota.pool.ReProvision.items=bob,jan,ted Quota.pool.ReProvision.item.bob.limit=1 |
タスクの割り当てを強制するには、TaskDefinition の poolName を参照します。このフォーマットは、次のとおりです。
<TaskDefinition ... quotaName=’{poolName}’..>
ほとんどのユーザーが一度に実行するタスクは 1 つだけです。調整を行ったり Active Sync タスクを実行するプロキシ管理者の場合、このタスクの割り当てを大きく設定します。
調整や Active Sync タスクは、設定プログラムのユーザーが使用しないようにしてください。設定プログラムは、無限のタスクにアクセスでき、使用可能なリソースを独占できるため、並列プロセスに悪影響を及ぼしかねません。
調整サーバーとは、調整を行う Identity Manager のコンポーネントです。ここでは、以下を初めとする調整サーバーのパフォーマンスを向上させるための推奨方法を説明します。
通常は、次のとおり実行すると調整サーバーのパフォーマンスを最適化できます。
調整タスクは、設定プログラムのユーザーが使用しないようにしてください。設定プログラムは、無限のタスクにアクセスでき、使用可能なリソースを独占できるため、並列プロセスに悪影響を及ぼしかねません。
代わりに、調整と Active Sync タスクには、能率化された最小限のユーザーを設定してください。タスクを実行する対象はタスクの一部として連続しているため、最小限のユーザーにすれば、タスクごとおよびリポジトリ内で更新するたびにスペースやオーバーヘッドの消費が少なくて済みます。
調整サーバーの状態ページ (debug/Show_Reconciler.jsp ) の説明を基に、キューサイズ別、利用可能なシステムリソース別、およびパフォーマンスのベンチマーク別に調整すべき設定を決定してください。これらの設定は、環境に応じて変わります。
利用可能な総メモリー量と空きメモリー量については、システムメモリー概要ページ (debug/Show_Memory.jsp ) をご使用ください。調整はメモリーを多く使う機能のため、この説明を使用すれば JVM に十分なメモリーが割り当てられてないかどうかが判断できます。また、ガベージコレクションの起動や、ヒープ使用量を調査するための JVM 内の未使用メモリーの消去にも、このページが役に立ちます。
調整を行うプロキシ管理者にユーザーフォームを割り当てるときは、ユーザーフォームをできる限り単純に保ち、必須フィールドのみを使用します。スキーママップよって変わりますが、waveset.organization 属性を計算するフィールドなどは十分間に合います。
ユーザーとロールに Identity Manager スキーマを表示したり編集する必要がある管理者は、IDM スキーマ設定管理者グループに設定し、IDM Schema Configuration 権限を付与する必要があります。
アカウント単位のワークフローを慎重に使用します。調整プロセスは、パフォーマンス目的でプロビジョニングタスクを開始することはデフォルトでありません。
アカウント単位のワークフロータスクを使用しなければならない場合は、調整ポリシーを編集して、調整サーバーの自動応答を対象イベントのみに制限してください。(「調整ポリシーの編集」ページの「状況」領域を参照してください。)
デフォルト設定で適切な場合が多いですが、「サーバー設定の編集」ページにある次の設定を調節すると、調整サーバーのパフォーマンスを向上できることがあります。
「並列リソース制限」。調整サーバーが並列処理できるリソーススレッドの最大数を指定します。
リソーススレッドは作業項目をワークスレッドに割り当てます。 このため、リソーススレッドを追加する場合、ワークスレッドの最大数を増やすことが必要になることがあります。
「最小ワークスレッド」。調整サーバーが常にオープンを保つ処理スレッド数を指定します。
「最大ワークスレッド」。調整サーバーが使用できる処理スレッドの最大数を指定します。調整サーバーは、ワークフローが要求するスレッドの数だけ起動します。この数には制限があります。ワークスレッドは、短時間アイドル状態が続くと自動的に閉じます。
アイドル中は、スレッドに行うべき処理がなく、指定した最小限のスレッド数にまで低下した場合に限り、スレッドが停止します。ロードが増えるに従って、最大スレッド数に達するまで、調整サーバーはさらにスレッドを追加します。調整サーバーは、最小限のスレッド数を下回ったり最大限のスレッド数を上回ることはありません。
通常、スレッドが増えると並列処理も増えます。ただし、多すぎるスレッドによっていつしかマシンに大きすぎる負荷が掛かったり、単に効果が得られなくなることがあります。
配備はそれぞれ異なるため、汎用的で最適な設定を推奨することはできません。調整サーバーの設定は、配備環境ごとに個別に調整する必要があります。
調整サーバーの設定を変更するには、次の項目を実行します。
管理者インタフェースにログインします。
「設定」->「サーバー」->「調整サーバー」タブの順にクリックします。
「サーバー設定の編集」ページが表示されたら、必要に応じて設定を調整します。
詳細は、「サーバーのデフォルト設定の編集」を参照してください。
Identity Manager で複数リソースに調整を設定する場合は、いくつかオプションがあります。
このサーバーに搭載されているすべてのリソースを一括して
このオプションは、Identity Manager から見ると一番効果的ですが、リソースが多いと (20 台を超えるなど)、Java リソースの問題が生じやすくなります。
このサーバーに搭載されているすべてのリソースを個別に
このオプションは、Java リソースのローディング時に楽になりが、スケジュール設定に大きな負荷がかかります。
各サーバーに搭載されているリソース別に一括して
このオプションは、経過時間を最小限に抑えますが、サーバー数をが大きくなります。
配備はそれぞれ異なるため、この設定には最適な解決策がありません。配備に合った解決策を見つけるには、これらのオプションを組み合わせて調整する必要があります。
この機能の業務目的を基に使用量アンケートを作成すると、進め方が決定しやすくなるかもしれません。
次の問題に取り組みます。
これらのリソースを調整している理由は。
どのリソースにも同じ目標があるか。
どのリソースも等しく重要または重大か。
すべてのリソースを同じスケジュールで調整しなくてはならないか。調整をかち合わないようにすることはできるか。
各リソースを調整すべき頻度は。
また、調整サーバーは、Web トラフィックを処理するプールに含める必要はありません。このサーバーはとトランザクション処理専用にあるため、決して直接対話しないようなサーバーを追加してください。トランザクション処理専用のサーバーを用意すると、大規模システムには一番上のオプションが最適かもしれません。
ビューをプロビジョニングする際のパフォーマンス問題は、ネットワーク遅延に原因があることがよくあります。個々のリソースアダプタをトレースすれば、何がパフォーマンス問題の原因になっているかがわかりやすくなります。
クエリーを実装する際に FormUtil.getResourceObjects を使用すると、リソースクエリーのパフォーマンスを向上させることができます。
クエリー結果のキャッシュに、次のうちいずれかの方法を用います。
getResourceObjects(Session session, String objectType, String resID, Map options, String cacheList, String cacheTimeout, String cacheIfExists)
getResourceObjects(String subjectString, String objectType, String resId, Map options, String cacheList, String cacheTimeout, String clearCacheIfExists)
cacheTimeout をミリ秒単位で設定します。
具体的な searchContext があれば、その検索を絞り込みます。
options.searchAttrsToGet に属性の最小数を返します。
スケジューラコンポーネントは、Identity Manager のタスクのスケジュール作成を管理します。
ここでは、以下を初めとするスケジューラのパフォーマンスを向上させるための推奨方法を説明します。
次の TaskDefinition オプションによって、タスク完了後のスケジューラによるタスクの処理の仕方が決まります。
resultLimit — タスク完了後のタスクの実行期間を秒単位で制御します。デフォルト設定は、タスクごとに異なります。0 を設定すると、タスクは完了後に即時削除されます。
resultOption — タスクの繰り返しインスタンスが開始されたときに行うべき動作を制御します。デフォルト設定は delete で、余分なタスクのインスタンスが削除されます。
これらのデフォルト設定は、完了したスケジューラのタスクの有効期間を短縮することでメモリーを最適化できるようにするためのものです。これらの設定を変更せざるをえない事情がない限り、デフォルトのままにしておいてください。
正常に完了したタスクを即時削除するとはいえ、デバッグできるまでエラーを含むタスクを残しておくには、次を実行することもできます。
resultLimit 値を、問題をデバッグするのに十分な期間に設定して、条件付きで完了したタスクを削除します。
WorkflowServices 呼び出し後に、実行時にエラーが何も報告さければ (WF_ACTION_ERROR is <null/> など)、resultLimit を 0 (または 小さい値) に設定します。
「サーバー設定の編集」ページで次の設定を調整すると、スケジューラのパフォーマンスを向上できることがあります。
「最大同時タスク数」。スケジューラが一度に実行できるタスクの最大数を指定します。
並列タスクの最大数の設定の許容値よりも多くのタスクが実行できる場合は、それ以上のタスクは空きができるまで、または別のサーバーで実行されるまで待機しなければなりません。
メモリーが足りなくなり CPU 時間を共有するほど多すぎるタスクがスワップしていると、オーバーヘッドによってパフォーマンス速度が低下します。また、最大数を小さく設定しすぎても、アイドル時間が増えます。スケジューラは、待機中のタスクが 1 分以内に実行できるように使用可能なタスクを毎分チェックします。
デフォルトの並列タスクの最大数設定 (100) で通常は十分です。配備で実行中のタスクを基に、もしくは配備が完了した後の実行時間の動作を調べて、この設定の増減を調整するかどうかを決定します。
場合によっては、このスケジューラを一時停止したり無効に設定しても構いません。たとえば、エンドユーザーインタフェースの処理専用にするサーバーがある場合、スケジューラを無効にすれば、そのサーバーでタスクの実行が行われないようになります。そのサーバーは、エンドユーザーインタフェース専用になり、ほかのサーバーに実行するよう開始したタスクが格納されます。
「タスク指定」。このサーバーで実行できるタスク一式を指定します。
この「タスク指定」設定を使用すると、サーバーで実行できるタスクをきめ細かく制御できるようになります。個別にタスクを制限することも、サーバー設定で制限することも可能です。
配備はそれぞれ異なるため、汎用的で最適な設定を推奨することはできません。スケジューラの設定は、配備環境ごとに個別に調整する必要があります。
管理者インタフェースにログインします。
「設定」->「サーバー」->「スケジューラ」タブの順にクリックします。
「サーバー設定の編集」ページが表示されたら、必要に応じて設定を調整します。
詳細は、「サーバーのデフォルト設定の編集」を参照してください。
Identity Manager は、認証済みセッションで認証されたユーザーが使用できる最長時間未使用の (LRU) キャッシュを保持します。既存の認証済みセッションを使用すると、セッションを必要とするオブジェクトとアクションに対してリポジトリアクセスの速度をアップすることができます。
認証プールサイズを最適化するには、Waveset.properties ファイルの session.userPoolSize 値を、そのサーバーで見込まれる並列ユーザーセッションの最大数に変更します。
Sun Identity Manager Gateway は、接続ごとにスレッドを生成して、リソース種類、ゲートウェイホスト、およびゲートウェイポートの一意の組み合わせごとに異なるプールを使用します。ゲートウェイは、5 分ごとにアイドル中の接続がないかチェックします。60 分間アイドル中の接続が合った場合、ゲートウェイはその接続を閉じてプールから削除します。
ゲートウェイは要求を受け取ると、次の操作を行います。
そのプールにアイドル中の接続がなければ、ゲートウェイは接続を新規作成します。
そのプールにアイドル中のプールがあれば、ゲートウェイはその接続を検索して再利用します。
そのリソースの最大接続数を設定してください。また、その種類のすべてのリソースに対し、そのゲートウェイを使用しているのと同じ方法でこの接続を設定してください。このリソース種類では、所定のホストでゲートウェイに行った最初の接続とポートが、そのリソースの最大接続数を使用します。
そのリソースの最大接続数を変更する場合は、サーバーを再起動して変更内容を反映してください。
次の例は、接続、要求、およびゲートウェイスレッドの関係を示したものです。
Active Directory リソースで最大接続数を 10 に設定し、2 台の Identity Manager サーバーを使用している場合は、その Active Directory リソースのゲートウェイに最大 20 までの同時接続を設定できます (Identity Manager サーバーごとに 10)。このゲートウェイは、各サーバーから送信された 10 の同時要求を受け付けることができ、各要求を別々のスレッドで処理します。同時要求数がゲートウェイの最大接続数を超えた場合、それ以上の要求はゲートウェイが要求を完了して接続をプールに戻すまで、キューの中に入れられます。
ゲートウェイコードはマルチスレッドですが、この特性はゲートウェイで使用中の API やサービスに対応しません。Active Directory には、ゲートウェイは Microsoft から提供されている ADSI インタフェースを使用します。このインタフェースがゲートウェイの要求を並列に処理するかどうかを判断する調査は一切行われていません。
このほか、ゲートウェイのパフォーマンスを向上させる方法には、次のようなものがあります。
ゲートウェイを、(ネットワーク接続の観点から) 管理対象ドメインのドメインコントローラの近くに配備します。
ゲートウェイリソースのブロックサイズを大きく設定すると、調整やロード操作中のスループットを高めることができます。
スループットが高まる結果は、カスタムワークフローがなく、実行中の属性調整が一切ない基本的な調整で説明したとおりです。最初はゲートウェイが多くのシステムメモリーを消費しますが、このメモリーは次第に解放されていきます。
これは先細りしていくことをご了承ください。ある時点を境に、ブロックサイズを大きく設定してもパフォーマンスがそれほど向上しなくなります。たとえば次のデータは、Active Directory リソースから 10,000 ユーザーのリソースからの読み込みを監視した速度を表したものです。読み込み中のゲートウェイ処理には、ピークメモリー使用量も含まれています。
ブロックの設定 |
時間単位で作成されたユーザー |
ゲートウェイのピークメモリー使用量 |
---|---|---|
100 |
500 |
20 M バイト |
200 |
250 |
25 M バイト |
500 |
9690 |
60 M バイト |
1000 |
10044 |
92 M バイト |
Exchange Server 2007 では、PowerShellExecutor が Exchange Server 2007 の動作を実行します。次のレジストリ設定を修正すれば、ゲートウェイ中の PowerShellExecutor の動作を変更できます。
どちらの設定も、ゲートウェイの動作とメモリー使用量に大きな影響を及ぼすことができます。これらのパラメータに加える変更内容は、慎重にテストを行った上で検討してください。
powerShellTimeout
「内容」。PowerShell 動作 (レジストリ型 REG_DWORD) のタイムアウト
「デフォルト」。60000 ミリ秒 (1 分)
powerShellTimeout 設定がタイムアウトすると、PowerShell 環境内の異常動作を防ぐために、すべての RunSpace 動作が中断され取り消されます。これにより、ゲートウェイが反応しなくなります。
powerShellTimeout 値を小さい値に下げると、動作が途中で取り消され、RunSpace の初期化が正しく完了しなくなることがあります。プール範囲の最初の RunSpace の監視起動時間は、2 秒から 5 秒までです。
powerShellTimeout 値は、起動時に読み取り専用のため、ゲートウェイを再起動しないとこの値は変更できません。
runSpacePoolSize
「内容」。プール内の RunSpaces 数 (レジストリ型 REG_DWORD)
「デフォルト」。5
「最小」。5
「最大」。25
ゲートウェイから PowerShell 動作を並列実行できるプール内の RunSpaces 数。Exchange 2007 でのユーザーのプロビジョニング動作または更新が、実行中の複数の PowerShell 動作につながることがあります。
起動した RunSpace が、大量のメモリーを消費することがあります。最初の RunSpace の通常サイズは、約 40 M バイトです。その後の RunSpaces は、通常 10 M バイトから 20 M バイトの間を消費します。
以上の数値は環境ごとに異なるため、ガイドラインとしてのみ記載したものです。この値を変更する際はご注意ください。
runSpacePoolSize 値は、起動時に読み取り専用のため、ゲートウェイを再起動しないとプールサイズ値は変更できません。
管理者インタフェースのタスクバーには、すでに実行したプロビジョニングタスクのリンクが表示されます。このため、多数のタスクがあると、インタフェースの速度が低下します。
インタフェースのパフォーマンスを向上させるには、<List>...</List> 要素を UserUIConfig オブジェクトから削除して、taskResults.jsp リンクを各 JSP から削除します。
次の例に、<TaskBarPages> 内の <List>...</List> エントリを示します。
<TaskBarPages> <List> <String>account/list.jsp</String> <String>account/find.jsp</String> <String>account/dofindexisting.jsp</String> <String>account/resourceReprovision.jsp></String> <String>task/newresults.jsp</String> <String>home/index.jsp</String> </List> </TaskBarPages> |