適切にチューニングを行えば、ほぼすべての動作に渡って Sun Identity Manager (Identity Manager) ソフトウェアのパフォーマンスを大幅に向上させることができます。このソフトウェア内の設定を変更する以外にも、アプリケーションサーバー、JavaTM Virtual Machine (JVMTM マシン)、ハードウェア、オペレーティングシステム、およびネットワークトポロジをチューニングすることによって、パフォーマンスを向上させることができます。
また、パフォーマンスの診断や監視には、複数のツールを使用することもできます。トレースやメソッドタイマーなど、パフォーマンスの診断や監視を行うための複数のツールが Identity Manager 内に用意されています。また、ほかの Sun Microsystems のツールや他社製のツールを使用して、Identity Manager のパフォーマンスに関する問題をデバッグすることもできます。
この章では、パフォーマンスの向上とパフォーマンス関連問題のデバッグに使用できるツール、方法、および参考資料について説明します。
チューニング処理は、多数のエンティティーに渡り、配備環境によって変わります。この章では、Identity Manager のパフォーマンスを最適化する各種チューニング方法を説明しますが、これらの方法はガイドラインとしてのみご利用ください。これらの方法は配備環境に応じて調整することが必要な場合があります。
この章では、次のトピックについて説明します。
Identity Manager のチューニングを開始する前に、ここで説明することにすべて目を通してください。
この章で説明するチューニング方法は、ガイドラインとしてのみご利用ください。配備に合わせてこれらのチューニングの一部の変更が必要になる場合があります。さらに、本稼働環境に変更内容を適用する前に、チューニング内容を必ず検証しておいてください。
Identity Manager をチューニングする前に、次の項目が必要です。
アプリケーションサーバーのチューニングに慣れておくこと。
Java 5.0 (Sun Identity Manager 8.1 に必須) に使い慣れておくこと。
配備環境におけるパフォーマンス制限事項を理解しておくこと。
パフォーマンスの向上が必要な領域を特定できること。
この章に記載したチェックリストを理解しておくこと。
Identity Manager のチューニングに関しては、この章の説明のほかに、この節で紹介しているドキュメントや Web サイトも参照してください。
パフォーマンスのチューニングについては、次のドキュメントを参照してください。
表 4–1 関連ドキュメント
ドキュメントのタイトル |
説明 |
---|---|
『IBM Developer Kit and Runtime Environment, Java Technology Edition, Version 5.0 Diagnostics Guide』 |
AIX JVM を使用したパフォーマンス問題の診断方法について説明します。 |
Java パフォーマンスのチューニングに関する情報、テクニック、およびポインタが記載されています。 |
|
『Oracle MetaLink: Note:114671.1: Gathering Statistics for the Cost Based Optimizer』 |
システム統計と Oracle ® の Cost-Based Optimizer (CBO) の使用方法について説明します。 注意: このドキュメントは、Oracle Metalink 購読者が入手できるものです。登録が必要です。 |
『Solaris Dynamic Tracing Guide』 |
DTrace を使用したシステム動作の監視、デバッグ、およびチューニング方法について説明します。 |
『Sun JavaTM System Application Server Performance Tuning Guide』 |
お使いの Sun Java System アプリケーションサーバーから最適なパフォーマンスを得る方法について説明します。Sun Microsystems ドキュメント Web サイト から、必要なバージョンの本書をダウンロードしてください。 |
『Tuning Garbage Collection with the 5.0 Java Virtual Machine』 |
JVM を使用したガベージコレクションアプリケーションのチューニング方法について説明します。 |
PrintGCStats スクリプトのダウンロード方法と使用方法、および JVM チューニングを最適なものにするための統計を収集する方法について説明します。 |
|
Oracle の Cost-Based Optimizer がシステム統計を使用する仕組みについて説明します。 |
|
JConsole を使用して、Java プラットフォームで実行中のアプリケーションの監視方法について説明します。 |
Identity Manager パフォーマンスをチューニングする際に有用と思われる Web サイトをいくつか次の表に示します。
表 4–2 有用な Web サイト
Web サイト URL |
説明 |
---|---|
診断ツール、フォーラム、機能と記事、セキュリティー情報、パッチの内容を含む Sun の Web サイト。 注意: このサイトの情報は、次の 3 分野に分かれています。
|
|
フォーラムを参照したり、質問を投稿したりできる SDN (Sun Developer Network) Web サイト。 |
|
Java プラットフォーム用オープンソースのパフォーマンスプロファイラである Java Runtime Analysis Toolkit の使用方法を説明する JRat Web サイト。 |
|
Oracle データベースのチューニング情報を記載した、Oracle の社内フォーラムサイト。 注意: このサイトに記載されている情報にアクセスするには、Oracle Metalink の購読者になる必要があります。 |
|
http://performance.netbeans.org/howto/jvmswitches/index.html |
パフォーマンスの向上に役立つ JVM スイッチのチューニング情報が記載された NetBeansTM Web サイト。 |
Sun の Share Space の Identity Manager リンク。 注意: このサイトに記載されている情報にアクセスするには、Share Space ID を登録する必要があります。 |
|
Sun の Share Space の Identity Manager FAQ。 注意: この FAQ にアクセスするには、Share Space ID を登録する必要があります。 |
|
SLAMD Distributed Load Generation Engine の Web サイト。 |
|
OpenSolaris Community: DTrace の Web ページ。 |
|
Solaris OS のチューニングに関する情報が記載されている Web サイト。 |
Identity Manager のソリューションのパフォーマンスは、次の配備固有の設定によって決まります。
リソース構成
接続しているリソースの数
接続しているリソースの種類
属性がリソースにマッピングされている方法
リソースの正確なバージョン
ネットワークトポロジ
ドメインコントローラの数と分散
インストールした Identity Manager ゲートウェイの数
同時設定の数
並行プロセスの数 (実効ワークフローの数)
同時に接続しているユーザーの数
同時に接続している Identity Manager 管理者の数
管理対象となるユーザーの総数
パフォーマンス問題をデバッグする際には、まず問題を解析して記述してください。次の設問に答えます。
パフォーマンスに問題がある場所はどこですか。調整、ワークフロー、カスタムワークフロー、GUI ページの読み込み、プロビジョニング、アクセスレビューうちのどれかですか。
CPU 境界、メモリー境界、リソース境界、ネットワーク境界のうちのどれかにあてはまりますか。
問題に対して設定は確認しましたか (ハードウェア、ネットワーク、パラメータなど)。
使用中の設置環境で、最近何か変更したものはありますか。
本質的に煩雑なリソースのプロファイルを試みて、問題がリソース側にあって Identity Manager 側にはないかどうか確認しましたか。
ビューのサイズはいくつですか。
複数のリソースにプロビジョニングしていませんか。
低速ネットワーク上のリソースが Identity Manager に接続されていませんか。
Identity Manager を搭載したサーバーで、余分なアプリケーションを実行していませんか。
組織に、ルール駆動型メンバーのルールが用意されていますか。
一貫したパターンがあるかどうかを実行して、一連のスレッドダンプを確認しましたか。
単一のスレッドダンプを見ただけでは、判断できないことがあります。
最近、トレースを起動しましたか。
JVM ガベージコレクションを確認しましたか。
メモリー管理に負荷が掛かる組織を追加しましたか。
ここでは、次のような配備環境のチューニングについて説明します。
ここでは、Java プラットフォームである Enterprise Edition (Java EE プラットフォーム) 環境の最適化に使用できるチューニング案をいくつか説明します。
これらのチューニング案は、一連の実験結果のうち、ユースケースのテストにおいてスループットにかなりの増加が確認されたものを基にしています。この向上は、JVM のサイズ変更と、ガベージコレクタの動作に影響を及ぼすスイッチによるものです。
Java、JConsole、または JVM のチューニングの詳細は、表 4–1 および 表 4–2 に記載されている Web サイトをご覧ください。
次の節では、Java EE 環境で Java と JVM をチューニングする方法について説明します。
Java パフォーマンスのチューニングの詳細、ベストプラクティス、および用例については、次の『Java Tuning White Paper』を参照してください。
http://java.sun.com/performance/reference/whitepapers/tuning.html
この節に記載したチューニング案は、次のチューニングスクリプトを基にしています。これらのスクリプトは、Sun Java System Application Server の domain.xml ファイル (ドメイン設定ディレクトリにあり、通常は domain-dir/config です。) に追加されました。
PrintGCStats – データマイニングのシェルスクリプト。verbose:gc ログからデータを収集し、ユーザーが指定した間隔でデータのサンプルを抽出して、ガーベジコレクションの中断時間、パラメータの算出、アプリケーションの実行時に渡るタイムラインの解析などの情報を表示します。
このスクリプトとガベージコレクション統計を使用して JVM チューニングを最適なものにする方法については、次の Web サイトを参照してください。
http://java.sun.com/developer/technicalArticles/Programming/turbo/#PrintGCStats
PrintGCDetails – より詳細なガベージコレクション統計が得られるシェルスクリプト。
PrintGCTimeStamps – PrintGCDetails スクリプトを使用して収集したガベージコレクション統計にタイムスタンプ情報を追加するシェルスクリプト。
最良の JVM パフォーマンスを得られるようにするには、次の点を確認してください。
『Sun Identity Manager 8.1 リリースノート』の「サポートされているソフトウェアと環境」節に記載されている必須の Java バージョンを使用し、最新の機能、バグの修正、およびパフォーマンス拡張機能を使用していること。
ガベージコレクションの最新バージョンを使用していること。
アプリケーションサーバーをインストールしたときのデフォルトのガベージコレクションスキームである旧バージョンを削除していないことがよくあります。Identity Manager で旧バージョンのガベージコレクタを実行すると、多数のオブジェクトが生成されるため、JVM が絶え間なくガベージを収集することになります。
Identity Manager を Sun Java System Application Server に配備している場合は、配備した Identity Manager インスタンスの server.xml ファイルにガベージコレクションの要素を追加すれば、スループットを高めることができます。
最大負荷に 300 人以上のユーザーが見込まれる場合は、次の設定を修正してパフォーマンスを高めます。
配備した Identity Manager インスタンスに HTTP リスナーを設定している場合は、server.xml ファイル内のリスナー定義要素を編集し、「ホスト上のアクティブ CPU 数」を「ホスト上のアクティブ HTTP リスナー数」で割った数をアクセプタスレッド数に設定します。
たとえば、次のようにします。
<HTTP リスナー ID=”HTTP リスナー-1” \アドレス=”0.0.0.0” ポート=”80” \アクセプタスレッド=”アクセプタスレッドの算出結果” ...>
大部分の Identity Manager 配備の静的コンテンツは頻繁に変更されるように設計されていないため、(「ファイルキャッシュ設定」ページにある) 静的コンテンツのファイルキャッシュ設定を編集しても構いません。コンテンツが再読み込みされる前のファイルキャッシュ内のコンテンツ最大有効期間に、大きな数値を指定します (24 時間単位の秒数など)。
「ファイルキャッシュ設定」ページにアクセスするには、HTTP サーバーノード用の Web ベース管理者コンソールから「ファイルキャッシュ」タブをクリックします。(詳細な手順については、最新の『Sun Java System Web Server Administrator’s Guide』を参照してください。)
Sun Application Server では、チューニング可能なものを公開しています。これによって、HTTP コンテナで確保される各種スレッドプールと接続キューのサイズが変わります。
デフォルトでは、チューニング可能なものの大半は同時接続ユーザー数 300 人以下の負荷とされています。
アプリケーションサーバーのチューニングには、次のガイドラインが役立ちます。
ヒープサイズ以外にも、大半のアプリケーションサーバーにはデフォルトのパラメータ設定が使用できます。ご使用中のリリースに応じて、サーバーのヒープサイズを変更してください。
最新の『Sun Java System Application Server パフォーマンスのチューニングガイド』の「アプリケーションサーバーのチューニング」の章では、Sun Java System Application Server のチューニング方法について説明しています。このドキュメントは、次の URL から入手できます。http://docs.sun.com/app/docs
また、Sun Application Server 8.2 Enterprise Edition をお使いの場合は、次のように変更すれば「並列モードのエラー」が解決され、パフォーマンスが改善され予測しやすくなるはずです。
古い世代のコレクションを常に実行している場合は、アプリケーションのヒープ面積を見直し、このサイズを増やしてみてください。たとえば、次のようにします。
500M バイトは小さめなサイズですので、この値を 3G バイトに増やせば向上する場合があります。
若い世代コレクションが 2G バイトの場合、スカベンジするたびに約 70M バイトをプロモートします。スカベンジを少なくとも 1 回行うと 70M バイトをプロモートするということを念頭に置いてください。たとえば、次の SurvivorRatio が必要になることがあります。
2 G バイト/70 M バイト X 2 = 4096/70 = 55
ここで、次のように設定します。
-XX:SurvivorRatio=32 -XX:MaxTenuringThreshold=1
この比率に設定すれば、早すぎるプロモートを防ぐことができ、またスカベンジパフォーマンスの低下の原因となりうる「偏り」も防ぐことができます。
-XX:CMSInitiatingOccupancyFraction=60 と設定しておけば、CMS コレクションがこのしきい値に達するまで起動したままになります。たとえば、次のようにします。
56402.647: [GC [1 CMS-initial-mark: 265707K(1048576K)] 1729560K(3129600K), 3.4141523 secs]
-XX:CMSInitiatingOccupancy=60 を削除し (デフォルト値の 69% を使用)、次の行を加えます。
-XX:UseCMSInitiatingOccupancyOnly
若い世代のコレクションが 2G バイトで、古い世代のコレクションが 1G バイトの場合でも、早すぎる CMS コレクションが行われてしまうことがあります。この比率を逆転してみてください。次のように、若い世代のコレクションを 1 G バイト、古い世代のコレクションを 2 G バイトに設定します。
-Xms3G -Xmx3G -Xmn1G
また、-XX:NewRatio を削除します。若い世代と全体のヒープサイズを明示的に指定していた場合は、この比率は余分です。
Java 開発キット (JDKTM ソフトウェア) の 5uXX バージョンを使用していて、過度に長すぎる「abortable preclean」サイクルがある場合は、一時的な回避策として -XX:CMSMaxAbortablePrecleanLoops=5 を使用することができます。
この値は、さらに調整する必要があります。
ガベージコレクタのパフォーマンスの詳細を表示するには、次の行を追加します。
-XX:+PrintHeapAtGC
冗長的なガベージコレクションデータの生成量が増えるので、このコマンドは慎重に使用してください。ガベージコレクタの出力の保存先に十分なディスク空き容量があることを確認してください。
Sun FireTM T2000 サーバーを使用している場合は、DTLB (Data Translation Look-aside Buffer) のヒープが大きいとリソースが不足してしまうことがあります。Java ヒープに大きなページを使用することでパフォーマンスに役立つことがよくあります。たとえば、次のようにします。
-XX:+UseLargePages
IBM WebSphere ® アプリケーションサーバーに搭載した Identity Manager をチューニングする場合、ヒープメモリーはスレッドに使用するメモリーに影響するため、ヒープに割り当てるメモリー量を制限するようにしてください。
多数のスレッドが同時に作成されてヒープサイズが増えると、アプリケーションのディスク空き容量限度を直ちに超えて、次のエラーが返されます。
JVMCI015:OutOfMemoryError
Identity Manager は、ID と構成データの保存と管理にリポジトリデータベースを基にしています。このため、データベースのパフォーマンスが Identity Manager のパフォーマンスに大きく影響することがあります。
データベースのパフォーマンスチューニングと管理の詳細は、データセットやベンダーによって異なるので、このドキュメントでは説明しません。また、データベース管理者 (DBA) は、すでにお使いのデータベースに精通している必要があります。
ここでは、データベースの計画、チューニング、および管理に役立つよう、Identity Manager アプリケーションの特徴を説明し、Identity Manager のデータとその典型的な使用法パターンの概要を説明します。
この情報は、次の節で構成されています。
Identity Manager のリポジトリには、3 種類のテーブルがあり、テーブルごとに使用方法の特徴が多少異なります。このテーブルについての情報は、次の節で構成されています。
属性テーブルを使用すると、定義済みの単一値または複数値のオブジェクト属性を照会できます。
大半のオブジェクト型のストアド属性はハードコードされます。
User オブジェクト型と Role オブジェクト型は、この規則における例外です。User と Role オブジェクトテーブルに格納されるインライン属性は構成可能なため、追加のカスタム属性をクエリー可能として設定できます。
属性状態を基にオブジェクトを検索すると、Identity Manager は対応するオブジェクトテーブルを使用して結合内の属性テーブルにアクセスします。結合の形式 (JOIN、EXISTS 述語、SUB-SELECT など) によっては、属性の状態ごとに発生するものもあります。
属性テーブルの行数は、対応するオブジェクトテーブルの行数に比例しています。この値は傾斜 (スキュー) の形に分布することがあります。複数値の属性には値ごとに行があります。オブジェクトの中にはほかと比べて属性や属性値が多いものもあります。通常、属性テーブルの行とオブジェクトテーブルの行には、多対 1 の関係があります。
属性テーブルのテーブル名は ATTR です。
Identity Manager では、対応するオブジェクトテーブルに加えた変更内容の履歴を追跡するのに変更テーブルを使用します。これらのテーブルのサイズは、オブジェクトの変更率に比例しますが、際限なく増えることはありません。Identity Manager は、自動的に変更テーブルを切り捨てます。
変更テーブルは、行の有効期間が比較的短く新しい行が頻繁に作成されるため、変動率が高くなることがあります。
変更テーブルへのアクセスは、通常、タイムスタンプフィールドの範囲スキャンで実行されます。
変更テーブルのテーブル名は CHANGE です。
Identity Manager のリポジトリは、オブジェクトテーブルを使用してラージオブジェクト (LOB) などの直列化データオブジェクトを保持します。オブジェクトテーブルでは、よく問い合わされる単一値のオブジェクト属性も保持できます。
大半のオブジェクト型のストアド属性はハードコードされます。
User オブジェクト型と Role オブジェクト型は、この規則における例外です。オブジェクトテーブルに格納されるインライン属性は構成可能なため、User と Role は、追加のカスタム属性をクエリー可能として設定できます。
オブジェクトテーブル内の行数と、格納されるオブジェクト数は一致します。オブジェクトテーブルごとに格納されるオブジェクト数は、そのテーブルに格納されるオブジェクト型によって決まります。オブジェクト型によっては多数のものもあれば、少数のものもあります。
Identity Manager は通常、オブジェクト ID またはオブジェクト名を使ってオブジェクトテーブルにアクセスしますが、テーブル内に格納されている属性のうちの 1 つを使ってアクセスすることもできます。オブジェクト ID とオブジェクト名は単一のオブジェクト型をとおして一意ですが、属性値は一意ではなかったり均等に分布されていたりします。属性によっては値が多いものもあれば、比較的少ないものもあります。さらに、複数のオブジェクト型で同じ属性を使用することもあります。属性の中には、あるオブジェクト型に対する値は多く、別のオブジェクト型に対する値は少ないものもあります。値の分布が均一でないと、インデックスページの分布も均一でなくなり、スキューと呼ばれる状態になります。
オブジェクトテーブルは、テーブル名に ATTR または CHANGE 接尾辞が付かないテーブルです。
オブジェクトテーブルにはそれぞれ 1 つの XML 列があり、LOG テーブルセットを除く各直列化オブジェクトを格納するのに使用されます。特定の LOG テーブルセットのオプションの属性は、それが存在する場合には XML 列に格納されます。たとえば、デジタル署名が有効に設定されている場合などがあります。
Identity Manager のデータは、アクセスパターン、カーディナリティー、有効期間、データの変更頻度などの点で類似したプロパティーを持つクラスにほぼ分類できます。リポジトリのテーブルセットに対応しているクラスは、次のとおりです。
エクスポートキューデータ「エクスポートキューデータ」
ユーザーデータは、ユーザーオブジェクトから構成されます。
管理対象 ID ごとにオブジェクトがあるため、このデータはかなり大きくなることが予想されます。大部分の演算は既存オブジェクトを更新したものになるため、最初に生成してからは、作成されるものはあまりないはずです。
ユーザーオブジェクトは有効期間が長いものが多く、削除される確率は比較的低くなります。
ユーザーデータは、USEROBJ テーブル、USERATTR テーブル、および USERCHANGE テーブルに格納されます。
ロールデータは、ビジネスロール、IT ロール、アプリケーション、アセットなどのロールのサブタイプを含む Role オブジェクトから構成されます。
ロールデータは組織データと似ており、お客様が Identity Manager を配備した後、このオブジェクトは比較的固定されます。
ただし、権限ロールセットがある外部ソースと一体化した配備は例外です。たとえば、一体化型にすると Identity Manager にロール変更の入力が必要になり、Identity Manager の Role データが変動しやすくなります。
(複数のユーザーが各ロールを共有しているとすれば) ロールオブジェクト数は、ユーザーなどの ID オブジェクト数よりも少ないと言えますが、これは企業のロール定義の仕方によって異なります。
ロールデータは、ROLEOBJ テーブル、ROLEATTR テーブル、および ROLECHANGE テーブルに格納されます。
アカウントデータは、Account Index のアカウントオブジェクトからのみ構成されます。
ユーザーデータと同様、既知のリソースアカウントごとにオブジェクトがあるため、アカウントデータは大きくなりがちです。アカウントオブジェクトは、一般的に有効期間が長く、削除される確率は比較的低く、最初に生成されてからは、作成されることはあまりありません。ネイティブアカウントの追加や削除を頻繁に行わない限り、またはネイティブ変更の検出を有効に設定しない限り、アカウントオブジェクトの変化はあまり発生しません。
Identity Manager は、アカウントデータを ACCOUNT テーブル、 ACCTATTR テーブル、および ACCTCHANGE テーブルに格納します。
コンプライアンス違反データには、監査ポリシーの評価に失敗した時期を表す違反レコードが記載されます。この違反レコードは、同じユーザーに対して同じ監査ポリシーが評価され、評価に合格するまで保持されます。違反レコードは、監査ポリシーのスキャンまたはアクセスレビューの一環として作成、変更、または削除されます。
違反レコードの数は、スキャンで使用される監査ポリシー数とユーザー数に比例します。インストールユーザー数が 5000、監査ポリシー数が 10 とすると、違反レコードは 500 (5000 x 10 x 0.01) と考えられます。この乗数 0.01 は、ポリシーの厳密度とユーザーアカウントの変更の仕方によって変わります。
Identity Manager は、コンプライアンス違反レコードを OBJECT テーブル、ATTRIBUTE テーブル、および OBJCHANGE テーブルに格納します。
権限付与データは、コンプライアンスのアクセスレビューを実行する場合にのみ作成される、ユーザー権限付与オブジェクトから主に構成されます。
権限付与レコードは大きなバッチに作成され、最初の作成から (何日もかけて) ゆっくりと変更され、その後は手つかずのままになります。このレコードは、アクセスレビューが削除されてから削除されます。
Identity Manager は、権限付与データをENTITLE テーブル、ENTATTR テーブル、および ENTCHANGE テーブルに格納します。
組織データは、オブジェクトグループまたは組織オブジェクトから構成されます。
オブジェクトグループデータは構成データと似ており、このデータは配備された後は比較的固定されます。一般的に、タスクオブジェクトと比べたり、ユーザーやアカウントなどの ID オブジェクトと比べるとオブジェクト数は (定義されている組織を単位とすると) 少ないですが、ほかの構成オブジェクトと比べるとこの数の方が多くなることがあります。
組織データは、ORG, ORGATTR テーブルと ORGCHANGE テーブルに格納されます。
タスクデータは、状態と結果データを含むタスクとワークフローに関するオブジェクトから構成されます。
オブジェクトが高速で作成、変更、および削除されるため、これらのテーブルにあるこのデータの有効期間は、ほかのクラスと比べると短いです。このテーブルのデータ量は、使用システムの動作量に比例します。
タスクデータは、TASK テーブル、TASKATTR テーブル、TASKCHANGE およびテーブルに格納されます。
構成データは、フォーム、ロール、ルールなどの Identity Manager のシステム構成に関するオブジェクトから構成されます。
構成データの特徴は、一般的に次のとおりです。
ほかのクラスと比べると比較的小さい。
変更は配備中とアップグレード中にのみ、大きいバッチで行われる。
配備された後は、あまり変更されることがない。
Identity Manager は、構成データを ATTRIBUTE テーブル、OBJCHANGE テーブル、および OBJECT テーブルに格納します。
データのエクスポートを有効に設定すると、レコードの中には、エクスポートタスクがレコードをデータウェアハウスに書き込むまで、Identity Manager のキューに入れられるものがあります。キューに入れられるレコードの数は、データエクスポートの構成と、キューの中のすべての型に対するエクスポート間隔と相関関係にあります。
デフォルトでキューに入れられるデータ型は次のとおりです。これ以外のデータ型はすべてキューに入れられません。
ResourceAccount
WorkflowActivity
TaskInstace
WorkItem
これらのテーブルのレコード数は、エクスポートタスクがキューを排出するまで増えます。最新のテーブルサイズは、JMX TM Bean から表示できます。
このテーブルに追加されたレコードは、変更されることがありません。これらのレコードは、調整、プロビジョニング、ワークフローの実行など、ほかの Identity Manager 動作中に書き込まれます。このデータエクスポータがタスク実行をエクスポートすると、タスクがテーブルを排出します。
Identity Manager は、エクスポートキューデータレコードを QUEUE テーブル、QATTR テーブル、および QCHANGE テーブルに格納します。
ログデータは、監査オブジェクトとエラーログオブジェクトから構成されます。ログデータは 1 度限り書き込めるので、新規の監査オブジェクトとエラーログオブジェクトは作成できても、これらのオブジェクトを変更することはできません。
ログデータは明示的要求によってのみ消去できるため、ログデータの有効期間は非常に大きくなりがちです。ログデータに頻繁にアクセスするかどうかは、属性テーブル内ではなくオブジェクトテーブル内に格納されている属性によって決まります。ログに対する属性値の分布もクエリーも、具体的には Identity Manager の使い方によって決まります。
たとえば、ログテーブル内の属性値の分布は、次によって決まります。
どの種類の変更が加えられたか。
どちらの Identity Manager インタフェースから変更が加えられたか。
どのオブジェクト型が変更されたか。
ログテーブルに対するクエリーのパターンは、お客様がそのログテーブルに対して実行する Identity Manager レポート、カスタムレポート、または外部データマイニングのクエリーによっても異なります。
Identity Manager は、監査ログレコードを LOG テーブルと LOGATTR テーブルに、そしてエラーログレコードを SYSLOG テーブルと SLOGATTR テーブルに格納します。このデータには、対応する変更テーブルがありません。
Identity Manager は、JDK ソフトウェアに用意されている VMID クラスでオブジェクトにグローバル一意識別子 (GUID) を生成します。
これらの GUID 値は、オブジェクトが作成された順に基づいて、格納されたプロパティーを文字列表現で表します。たとえば、Identity Manager でオブジェクトを新規作成すると、古い方のオブジェクトより新しい方のオブジェクトに大きいオブジェクト ID が付きます。このため、Identity Manager がデータベースに複数の新しいオブジェクトを挿入すると、オブジェクト ID に基づいたインデックスが同じブロックを競合することがあります。
Identity Manager は、準備済み文を動作 (データベース行の挿入や更新など) に使用することはあっても、クエリーに使用することは通常ありません。
Oracle® を使用している場合は、この動作のためにライブラリキャッシュに問題が生じることがあります。特に、文のバージョンが多数存在するとライブラリキャッシュのラッチに競合が起こることがあります。
この競合を解決するには、Oracle CURSOR_SHARING パラメータ値を EXACT から SIMILAR に変更します。この値を変更すると、SQL 文のリテラルが Oracle によってバインド変数に置き換えられるため、バージョンの数が減ります。
Identity Manager はバイトよりも文字データを通常読み書きする Java アプリケーションのため、データベースが用いるエンコーディングは制限されません。
Identity Manager は、データが正しく送信および返信されることだけを要求します。たとえば、書き込み時と再読み取り時にデータが破損することはありません。複数バイト文字をサポートし、データに合ったエンコーディングを使用してください。通常は UTF-8 エンコーディングで十分ですが、日本語やアラビア語などの真の複数バイト文字を多数用いる企業では、UTF-16 の方が良いかもしれません。
大多数のデータベース管理者が複数バイト文字をサポートしているエンコーディングの方を望む理由は、次のとおりです。
配備が拡張され、国際文字セットのサポートが必要になることが多い。
ASCII のように見えるが実際には全角ダッシュ (—) のような複数バイトを含んだ Microsoft アプリケーションのテキストをカット&ペーストすることがある。
ここでは、リポジトリデータベースをチューニングする際のガイドラインをいくつか説明します。
データベース管理者は、統計を頻繁に実行してリポジトリデータベースの現状を監視する必要があります。
データソースを使用している場合は、RepositoryConfiguration オブジェクトの connectionPoolDisable 属性を true に設定して、Identity Manager リポジトリの内部接続プールの自動化を無効に設定します。
たとえば、<RepositoryConfiguration connectionPoolDisable=’true’> と設定すると (Identity Manager 用とアプリケーションサーバー用に) 接続プールが 2 つにならないようにできます。
RepostioryConfiguration オブジェクトを編集して、固有の単一値属性に対する検索パフォーマンスを向上させることもできます。たとえば、このオブジェクトを編集して、ユーザー検索に使用したり相関キーとして使用する employeeID などの拡張属性を追加してください。
デフォルトの RepositoryConfiguration オブジェクトは、次の例のようになります。
<RepositoryConfiguration ... > <TypeDataStore Type="User" ... attr1="MemberObjectGroups", attr2="lastname" attr3="firstname" attr4="" attr5=""> </TypeDataStore> </RepositoryConfiguration> |
省略符号は、ここには無関係の XML 属性を表しています。
attr1、attr2、attr3 、attr4、および attr5 の XML 属性はそれぞれ、waveset.userobj テーブルにコピーすべき単一値属性を示しています。waveset.userobj テーブルは、最大 5 つまでのインライン属性を格納できます。RepositoryConfiguration 内の attr1 という属性値は、このテーブルの "attr1" データベース列にコピーされます。
インライン属性は、(子の attribute テーブル列としてではなく) Type の基本 object テーブルに格納されます。
インライン属性を使用すると、属性に対するリポジトリのクエリーのパフォーマンスが向上します。(インライン属性はメインの「object」テーブルにあるため、インライン属性に対するクエリーの方が、子の「attribute」テーブルに格納されているインライン属性以外に対するクエリーよりも高速です。インライン属性以外に対するクエリー条件には、属性テーブルに「結合」が必要になります。)
デフォルトでは、Identity Manager が MemberObjectGroups、lastname、および firstname のインライン属性を使用します。
クエリーに使用できる属性であれば、検索を高速化するためにもう 2 つ属性を追加しても構いません。
たとえば、配備に employeeID の拡張属性がある場合、この属性インラインを追加すれば、その属性に対するリポジトリ検索のパフォーマンスが向上します。
lastname や firstname が不要な場合は、削除したりほかの属性と代えても構いません。
MemberObjectGroups は削除しないでください。Identity Manager は、承認チェックの高速化にこの属性を内部で使用します。
各テーブルセットに格納されるオブジェクト型の詳細は、「データクラス」を参照してください。
ここでは、Oracle と SQL Server のリポジトリデータベースをチューニング際のベンダー固有のガイドラインについていくつか説明します。
現在、開発とデモ用にサポートされているのは、MySQLTM データベースだけです。
ここでは、Oracle リポジトリデータベースをチューニングする際のガイドラインについて説明します。
Identity Manager アプリケーションは、Oracle データベースの機能やオプションを必要としません。
Oracle リポジトリデータベースと Identity Manager サービスプロバイダ や Identity Manager を使用する場合、Identity Manager は LOB データ型ではなく LONG データ型をデフォルトで使用するため、オブジェクトテーブルの断片化の問題に遭遇するかもしれません。LONG データ型を使用すると、使用可能スペースに作成できないエクステントスペースの「未割り当て」量が増えることがあります。
この問題を抑制するには、次の項目を実行します。
Object テーブルの EXPORT をダンプし、インポートし直して未割り当てのエクステントスペースを解放します。インポートしたら、データベースを終了して再起動する必要があります。
LOB データ型と、Oracle に標準の LOB 実装を提供する DataDirect Technologies の Merant ドライバを使用します。
自動的に空きスペースを管理するローカルマネージメントテーブルスペース (LMT) を使用します。この LMT は、Oracle 8.1.5 で使用できます。
Identity Manager は、SGA サイズ変更、バッファサイズ変更、オープンカーソル、プロセスなどに Oracle の init.ora パラメータ設定を必要としません。
Identity Manager リポジトリは汎用的なデータベースでありながら、まさにオブジェクトデータベースと言えます。
Identity Manager テーブルのうち、TASK テーブルセットが最もトランザクション処理の特徴を備えています。LOG と SYSLOG テーブルセットは直列化オブジェクトを格納しないため、これらも例外です。
テーブルの説明、各テーブルに格納されるオブジェクト型、および各テーブルの一般的なアクセス方式については、「リポジトリテーブルの種類」と「データクラス」を参照してください。
Oracle データベースにパフォーマンスの問題がある場合は、Identity Manager では比較的効率がよいと思われるクエリーに対して選択されているクエリー計画に問題がないか調べてください。
たとえば、インデックスが使用可能な場合、Identity Manager はテーブルの完全スキャンが実行されるように設定されています。こういった問題は、自動ワークロードリポジトリ (AWR) レポートにある SQL の buffer gets テーブルによく見られます。この問題は、Enterprise Manager ツールでも表示することができます。
パフォーマンス問題は、データベーステーブルの統計が不良か紛失した場合によく起こります。この問題を解決すれば、データベースと Identity Manager の両方のパフォーマンスを向上させることができます。
次の記事は Oracle から入手でき、Oracle のコストベースオプティマイザ (CBO) を調べるのに役立ちます。
『Oracle MetaLink: Note:114671.1: Gathering Statistics for the Cost Based Optimizer』
最適なクエリー計画を選択するもう一つの方法として、SQL プロファイルを用いた調査も行えます。パフォーマンスの悪い SQL を特定する際には、Enterprise Manager から SQL Advisor を使用してこれらのプロファイルを作成します。
Oracle 再実行ログに予想外の増加が検出された場合は、手動操作で無限ループに陥っているワークフローがあるかもしれません。ループによってリポジトリが絶えず更新され、その結果 TaskInstance ごとのサイズが大幅に増加してしまいます。ワークフローのエラーは、WF_ACTION_TIMEOUT を不適切に取り扱ったり、ワークフローの途中でブラウザを閉じたりすると起こります。
問題のあるワークフローを回避するには、本番稼動前に各手動操作のプレビューを行い、次の点を検証します。
タイムアウトを設定しているか。
手動操作で用いる動作に、タイムアウトの処理に合った遷移ロジックを作成しているか。
TaskInstance に大量のデータがある場合、手動操作に公開変数タグを使用しているか。
CURSOR_SHARING パラメータ値を EXACT から SIMILAR に変更すると、Identity Manager のパフォーマンスを大幅に向上できることがよくあります。
Identity Manager は、準備済み文をいくつかの動作 (データベース行の挿入や更新など) に使用することはあっても、これらの文をクエリーに使用することはほぼありません。
Oracle を使用するとき、この動作によってライブラリキャッシュに問題が生じることがあります。特に、文のバージョンが多数存在するとライブラリキャッシュのラッチに競合が生じることがあります。CURSOR_SHARING を SIMILAR に変更すると、Oracle が SQL 文内のリテラルをバインド変数に置き換えるため、バージョンの数を大幅に減少できます。
詳細は、「準備済み文」を参照してください。
SQL Server 2000 データベースをリポジトリとして使用している顧客より、並行処理が増加するときに SQL Server の内部で悲観的 (Pessimistic) ロックを使用すること (主にロックエスカレーション) によるデッドロックの問題が SQL Server 2000 に発生するという報告がありました。
これらのデッドロックエラーは、次の形で表示されます。
com.waveset.util.IOException: ==> com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 51) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction. |
このデッドロック問題を回避または解決するには、次の項目を実行します。
SQL Server 2005 データベースを使用します。
次のようにコマンドを初期化して、READ_COMMITTED_SNAPSHOT パラメータを設定します。
ALTER DATABASE waveset SET READ_COMMITTED_SNAPSHOT ON
READ_COMMITTED_SNAPSHOT パラメータを有効にすると、次のようになります。
SELECT 文の実行中にブロックの原因となりうる競合がなくなります。そのため、SQL Server 内部へのデッドロックの危険性が大幅に減少します。
不確実なデータが読まれなくなります。そのため、SELECT 文が確実なデータの一貫したビューを受信できるようになります。
READ_COMMITTED_SNAPSHOT パラメータの詳細は、http://msdn2.microsoft.com/en-us/library/ms188277.aspx を参照してください。
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> |
ここでは、パフォーマンス問題のデバッグに使用できる、各種 Identity Manager と、第三者のデバッグツールについて説明します。
これらの情報は、次のように構成されています。
トレースは、システムパフォーマンスに影響を及ぼします。最適なパフォーマンスが得られるようにするには、最小限のトレースレベルを指定するか、システムのデバッグ後にトレースを無効に設定してください。
ここでは、Identity Manager のデバッグページにアクセスする手順を説明するとともに、このページを使用して Identity Manager のパフォーマンス問題を突き止めデバッグする方法について説明します。
これについては、次のセクションを参照してください。
Identity Manager のデバッグページにアクセスして操作を実行するには、Debug、Security Administrator、または Waveset Administrator 機能が必要です。管理者とコンフィギュレータには、デフォルトでこの機能が割り当てられています。
デバッグ機能がない場合は、エラーメッセージが表示されます。
ブラウザを開き、管理者インタフェースにログインします。
次の URL を入力します。
http:// host:port /idm/debug
各表記の意味は次のとおりです。
host は、Identity Manager の実行先アプリケーションサーバーです。
port は、このサーバーが監視中の TCP ポート数です。
システム設定ページが表示されたら、開くデバッグページの .jsp ファイル名を入力します。
たとえば、次のようにします。
http:// host: port /idm/debug/pageName.jsp
デバッグユーティリティーの中には、システム設定ページからリンクされていないものもありますが、これらを使用すると、製品のパフォーマンスと使いやすさのデータを収集できるようになります。デバッグページの全体リストについては、コマンドウィンドウを開いて idm/debug ディレクトリの中身をリストします。
各種メソッドの呼び出しタイマー統計を収集して表示するには、制御タイミングページを使用します。この情報を基に、特定メソッドに対するボトルネックと呼び出された API を追跡できます。呼び出しタイマーの基準値をインポートまたはエクスポートするのにも、呼び出しタイミングページのこのオプションが使用できます。
呼び出しタイミングの統計は、トレースが有効に設定されている間にだけ収集されます。
トレースとタイミングを有効にするには、「制御タイミング」ページを開き、「タイミングとトレースの開始」をクリックします。
タイミングを終了するには、「タイミングとトレースの終了」をクリックするか「タイミングの終了」をクリックします。
ページが再表示され、統計が使用できるメソッドのリストとメソッドの集約呼び出しタイマー統計が「タイミングの表示」テーブルに入力されます (呼び出し側から中断されません)。
このテーブルには、次の情報が記載されています。
メソッド名 (呼び出すメソッドを表示するには、そのメソッド名をクリックします)
総使用時間
平均時間
最小時間
最大時間
総呼び出し数
総エラー数
このリストを消去するには、「タイミングの消去」をクリックします。
コンソールから呼び出しタイマーのデータを収集するには、callTimer コマンドを使用します。このコマンドは、アップグレード中や、アプリケーションサーバーで Identity Manager を実行していないなどの状況で、パフォーマンス問題をデバッグする際に有用です。
Identity Manager をインストールしたときに付属している Java クラスにトレースを有効にを設定するには、「トレース設定の編集」ページを使用します。
具体的には、このページから次のトレース設定を行えます。
トレースするには、メソッド、クラス、またはパッケージを選択して、取り込むトレースのレベルを指定します。
トレース情報をファイルまたは標準出力先に送信します。
格納対象となるトレースファイルの最大数と、各ファイルの最大サイズを指定します。
トレース出力ファイル内の日時の書式設定方法を指定します。
キャッシュ対象となるメソッドの最大数を指定します。
トレースファイルへのデータの書き込み方を指定します。
データが生成されるに従って、データがトレースファイルに書き込まれるか、データがキューに入れられてからファイルに書き込まれます。
データソースを使用しない場合は、「ホスト接続プール」ページから接続プール統計を表示することができます。これらの統計には、プールのバージョン、作成された接続数、アクティブ数、プール内の接続数、プールから処理されている要求数、および破棄された接続数が記載されます。
この「ホスト接続プール」ページは、ゲートウェイへの接続管理に使用された接続プールの概要を表示する際にも使用できます。この情報を使用して、低位アドレスメモリー状態を調べられます。
最近使用した XML パーサーをキャッシュから消去して低位アドレスメモリー状態を調べるには、「消去したキャッシュのリスト」ページを使用します。
メソッドレベルですばやくホットスポットを検出して評価するには、「メソッドタイミング」ページを使用します。
Identity Manager メソッドから収集され、「メソッドタイミング」ページに表示される情報は、次のとおりです。
メソッド名
メソッドが呼び出された回数
メソッドがエラー状態で終了した回数
メソッドによって消費された平均時間
各メソッドの呼び出しによって消費された最小時間と最大時間
「メソッドタイミング」ページには、次のリンクを記載したテーブルもあります。これらのリンクをクリックすると、詳細を表示できます。
「詳細」。呼び出しスタックの情報が表示されます。
「履歴」。最後の呼び出し時刻とともに、呼び出し期間のグラフが表示されます。
「履歴データ」。呼び出しが生成された時刻とその呼び出し期間とともに、最後の呼び出しのリストが表示されます。
Identity Manager は、デフォルトでスタック履歴を保持しません。スタック履歴を保持してその深さを制御するには、Waveset.properites を編集して MethodTimer キーを調べます。
「メソッドタイミング」ページにある「すべて消去」オプションは、全ての結果を消去します。このオプションは、デフォルトで有効になっています。
システムに影響を及ぼしかねない大きそうなオブジェクトを検出するには、この「オブジェクトサイズの概要」ページを使用します。
この「オブジェクトサイズの概要」ページには、リポジトリに格納されるオブジェクトのサイズが (文字単位) で表示されます。このオブジェクトは型別にリストされ、型別の総オブジェクト数とオブジェクトの組み合わせ総サイズ、平均サイズ、最大サイズ、および最小サイズが記載されます。
そのオブジェクト型のサイズの詳細は、「型」列のエントリをクリックします。たとえば、リポジトリ内の最大設定オブジェクトの ID、名、サイズを表示するには、「設定」をクリックします。
このサイズ情報は、「コンソール」コマンドラインからもアクセスできます。
コンソールを開きます。
コマンドプロンプトで、次を入力します。
showSizes [ type[limit ]]
アップグレードの場合、更新または再表示されるまで既存オブジェクトのサイズが 0 と記録されます。
システムで使用中のプロビジョニングスレッドの概要を表示するには、この「管理者とコンフィギュレータ用のプロビジョニングスレッド」を使用します。この概要は、Show_Threads.jsp で用意される情報のサブセットです。
単一のスレッドダンプを見ただけでは、判断できないことがあります。
低位アドレスメモリー状態の調査に役立つよう、次の項目について表示するには、この「システムキャッシュの概要」ページを使用します。
管理者に関連付けられているオブジェクトキャッシュ
システムオブジェクトのキャッシュ
ユーザーのログインセッション
XML パーサーのキャッシュ
利用可能な総メモリー数と空きメモリーを表示するには、この「システムメモリーの概要」ページを使用します。調整などのメモリーを消費する機能を使用している場合は、この情報を基にして JVM に十分なメモリーが割り当てられているかどうかが突き止められます。
また、ガベージコレクションの起動や、ヒープ使用量を調査するための JVM 内の未使用メモリーの消去にも、このページが役に立ちます。
この「システムプロパティー」ページには、ソフトウェアバージョン、パス、環境変数など、使用中の環境についての情報が記載されます。
(調整や Active Sync などの) 自動プロセスが実行中であることを確認できるように、実行中のプロセスを表示するには、この「システムスレッド」ページを使用します。
このページには、プロセス種類、プロセス名、そのプロパティー、プロセスがデーモンかどうか、およびプロセスがいまだに実行中かどうかについての情報が記載されます。
単一のスレッドダンプを見ただけでは、判断できないことがあります。
最近ログインしたユーザーのキャッシュ済みセッションをすべて消去し、低位アドレスメモリー状態を調べるには、この「消去されたセッションプール」ページを使用します。
Waveset.properties ファイルのプロパティーを表示して一時的に編集するには、この「Waveset プロパティー」ページを使用します。Waveset.properties ファイルの常駐先の特定サーバーには、サーバーを再起動して変更内容を反映していなくても、各種のプロパティー設定をテストできます。編集したプロパティー設定は、次回サーバーを再起動するまで、反映されたままになります。
テスト XML リソースアダプタをキャッシュから消去し、低位アドレスメモリー状態を調べるには、この「フラッシュして消去された XML リソースアダプタのキャッシュ」ページを使用します。
パフォーマンスの潜在的ボトルネックを見つけるには、次の Sun Microsystems ツールと第三者ツールが使用できます。
これらのツールは、使用中の配備でカスタム Java クラスを使用する場合に有用です。
Identity Manager には、使用中の配備のパフォーマンス問題をトラブルシューティングするのに役立つ Profiler ユーティリティーが搭載されています。
カスタマイズしたフォーム、Java、ルール、ワークフロー、および XPRESS がパフォーマンス問題とスケール問題の原因になることがあります。この Profiler は各領域での経過時間を調べるので、フォーム、Java、ルール、ワークフロー、XPRESS オブジェクトのうちどれがパフォーマンス問題とスケール問題の一因となっているか、一因となっている場合は、そのオブジェクトのどの部分が問題の原因になっているかがわかります。
Profiler の詳細は、『Sun Identity Manager 8.1 リリースノート』の「Identity Manager プロファイラの操作」を参照してください。
DTrace 機能は、Solaris 10 オペレーティングシステム用に動的にトレースするフレームワークで、JVM 動作を監視できるようになります。
DTrace には、30,000 を超える検証機能が搭載されており、統合されたユーザーレベルとカーネルレベルのトレース機能を使用して、プロダクションシステム内を把握できるようにします。また、C 言語や awk 言語に似た D 言語で、任意のデータと式をトレースすることもできます。この DTrace 機能にも、JVM を監視するための特殊なサポートが備わっているので、使用中のシステム全体と JVM 外部のスパンが監視できるようになります。
DTrace は、検証機能が JVM に内蔵されているので Java 6 で一番使用しやすくなっています。この機能は、Java 1.4 と Java 5 でも動作しますが、次の URL から JVM PI または JVM TI エージェントをダウンロードする必要があります。
https://solaris10-dtrace-vm-agents.dev.java.net/
次の例は、DTrace スクリプトの記述方法を示したものです。
#!/usr/sbin/dtrace -Zs #pragma D option quiet hotspot$1::: { printf("%s\n", probename); } |
この例では、$1 をスクリプトの最初の引数に置き換えてください。これは、管理対象となる Java プロセスの PID としてください。たとえば、次のようにします。
# ./all-jvm-probes.d 1234
次の表は、各種 DTrace の検証機能を有効にできるコマンドを説明したものです。
表 4–3 DTrace コマンド
DTrace はシステム処理を増やすため、この機能はシステムパフォーマンスに影響します。この影響はごくわずかですが、負荷のかかる有効化で大量の検証機能を有効にすると大きくなります。
DTrace のパフォーマンスへの影響を最小限に抑える手順については、『Solaris Dynamic Tracing Guide』の「Performance Considerations」の章に記載されています。
DTrace の詳細は、/usr/demo/dtrace および man dtrace を参照してください。
Identity Manager を使用すると、Java Management Extensions (JMXTM) を使用して、所定のリソースアダプタの操作における操作上の統計を取り込み表示することができます。このデータは、システム状態とレポートを監視するなど、診断と予測に使用できます。
この統計データには、次の情報が含まれています。
動作が実行された回数
操作の最小期間、最大期間、平均期間
オブジェクト |
監視対象となった動作 |
---|---|
アカウントの場合 |
|
動作の場合 |
Run |
その他オブジェクトの場合 |
|
JMX は、サーバー別のリソースアダプタごとに MBeans を作成して、これらの Beans を次のパターンに一致する名前で登録します。
serverName=server name, resourceAdapterType=Resource Adapter Type, resourceAdapterName=Resource Adapter Name |
Identity Manager は、正常に完了したかエラーで完了したか、完了した処理のすべてに統計を記録します。ただし Identity Manager は、例外を投げる処理など未完成の処理の統計は記録しません。
excludes の設定方法は、次のとおりです。
管理者インタフェースから、「設定」->「サーバー」の順に選択します。
「サーバーの設定」ページで、次のいずれかのタスクを実行します。
サーバーのデフォルト設定を編集するには、「サーバーのデフォルト設定の編集」ボタンをクリックします。
サーバーのポリシーを編集するには、そのサーバーのリンクをクリックします。
リソース監視を有効にするには、「JMX」タブをクリックして「JMX リソースアダプタモニターの有効化」ボックスを有効にします。
特定のリソースを除外するには、「JJMX リソースアダプタモニターの対象外」リストに正規表現を追加します。
特定動作の監視を除外するには、「JMX リソースアダプタモニター操作の対象外」リストに正規表現を追加します。
どの excludes も、正規表現を使用します。特定リソースを除外した場合、JMX はリソース名だけで照合します。たとえば次の名前のアダプタがある場合は、
resource1 resource2 resource3 resource10 resource11 |
次のパターンを指定します。
.*1$ |
つまり、何かが 1 (1$) で終わるまで、0 以上の任意の文字 (.*) にマッチします。JMX は、resource1 と resource11 を除外します。
処理の場合も、手順は同様です。処理に次の名前が付いている場合は、パターンがこの名前に一致する必要があります。
ACCOUNT_CREATE ACCOUNT_UPDATE ACCOUNT_DELETE ACCOUNT_GET ACCOUNT_AUTHENTICATE OBJECT_CREATE OBJECT_UPDATE OBJECT_DELETE OBJECT_GET OBJECT_LIST ACTION_RUN |
たとえば、^ACCOUNT.* パターンは ACCOUNT で始まるすべての処理を除外します。または、このパターンを使用すると updates と deletes が除外されます。
.*UPDATE$ .*DELETE$ |
JMX の設定方法と使用法の詳細は、『『Sun Identity Manager 8.1 ビジネス管理者ガイド』』の「JMX 監視の設定」 および 『Sun Identity Manager 8.1 ビジネス管理者ガイド』の「JMX パブリッシャータイプ」を参照してください。
Java Monitoring and Management Console (JConsole) は、Java Management Extension (JMX) テクノロジ対応のグラフィカル管理ツールで、JDK 5 以降に同梱されています。JConsole は実行中の JVM に接続し、接続している JMX エージェントの JVM MBeans から情報を収集します。
具体的に JConsole で実行できるタスクは、次のとおりです。
低位アドレスメモリーとデッドロックの検出
JConsole は、メモリーシステム、メモリープール、および MBeans ガベージコレクタにアクセスして、メモリー消費量、メモリープール、ガベージコレクション統計などのメモリー使用量に関する情報を表示します。
ガベージコレクションの有効化または無効化
冗長トレースの有効化または無効化
ローカルおよびリモートアプリケーションの監視
現在のヒープメモリー使用量、ヒープ以外のメモリー使用量、ファイナライズに保留されているオブジェクト数など、MBeans の監視と管理を行います。
パフォーマンス、リソース消費量、およびサーバー統計に関する情報を表示
JVM と監視した値、アプリケーションで実行中のスレッド、および読み込まれたクラスに関する概要を表示
オペレーティングシステムリソース (Sun のプラットフォーム拡張) に関する情報を表示。次のようなものがあります。
CPU プロセス時間
利用可能な物理メモリーの総容量と空き容量
確定した仮想メモリー量 (プロセスの実行に確実に利用できる仮想メモリー量)
利用可能なスワップ領域の総容量と空き容量
オープンファイルの記述数 (UNIX® のみ)
JConsole を使用した Java プラットフォーム上のアプリケーション監視の詳細は、「JConsole を使用したアプリケーション監視」という Sun Developer Network (SDN) 記事を参照してください。次の URL から入手できます。
http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
Identity Manager には、次の点に関する情報を提供する JMX MBeans がいくつか搭載されています。
Identity Manager Server Cluster
データエクスポータ
スケジューラ
潜在的なパフォーマンスボトルネックを見つけるには、Java プラットフォーム用オープンソースのパフォーマンスプロファイラである Java Runtime Analysis Toolkit (JRat) を使用します。使用中の配備でカスタム Java クラスを使用する場合は特に使用します。JRat は、使用中のアプリケーションの実行を監視し、アプリケーションのパフォーマンスの測定を維持します。
たとえば、プロビジョニングにカスタムワークフローがある場合にこの JRat を使用すると、呼び出されているクラスを表示したり、デフォルトの Identity Manager プロビジョニングワークフローと比較したワークフローの実行に掛かる時間を表示できます。
JRat の詳細は、http://jrat.sourceforge.net を参照してください。