2.3 パフォーマンスの調整

パフォーマンスの調整は複雑な課題です。Identity Managerユーザアプリケーションは、さまざまな対話を行う幅広いテクノロジーに依存しています。パフォーマンスの低下を招くような設定シナリオやユーザ対話シナリオをすべて予測することは不可能です。それでもなお、サブシステムの中にはパフォーマンスを飛躍的に向上できるベストプラクティスとなり得るものもあります。詳細については、次を参照してください。

2.3.1 ログ

ユーザアプリケーションでは、Novell Auditによるログと、オープンソースのApache log4jフレームワークによるログが可能です。デフォルトではNovell Auditによるログは無効になっています。これに対し、log4jによるファイルとコンソールのログはデフォルトで有効になっています。

メモ:ログが可能なイベントの種類、およびログの有効/無効の切り替えについては、このガイド後半のセクション 5.0, ログの設定セクション 12.0, ログの環境設定を参照してください。

log4jの設定は$IDMINSTALL/jboss/server/IDMProv/conf/の中にあるlog4j.xmlというファイルに含まれています。このファイルの下部に、次のエントリがあります。


<root>     <priority value="INFO" />     <appender-ref ref="CONSOLE" />     <appender-ref ref="FILE" /> </root>

root内に値を割り当てると、レベルが明示的に割り当てられていないログアペンダはすべてrootに指定されたログレベル(この場合はINFO)を継承します。たとえば、デフォルトではFILEアペンダにはしきい値レベルが割り当てられていないため、ルートのしきい値レベルを引き継ぎます。

log4jで使用されるログレベルはDEBUG、INFO、WARN、ERROR、およびFATALで、これはorg.apache.log4j.Levelクラスで定義されています。これらの設定を適切に使用しないと、パフォーマンスの面で問題が発生する可能性があります。

概して、INFOやDEBUGは特定の問題をデバッグするときにだけ使用すべきです。

ルートに含まれるアペンダに特定のしきい値レベルが設定されていない場合、デバッグを行うとき以外(すでに説明したように)、しきい値をERROR、WARN、またはFATALに設定する必要があります。

ログレベルが高いときのパフォーマンスは、メッセージの冗長性とはほとんど関係なく、log4jではコンソールとファイルのログが同時書き込みに関与しているという単純な事実に影響されます。AsyncAppenderクラスを使用できますが、このクラスを使用してもパフォーマンスの向上が保証されるわけではありません。この問題(Apache log4jの既知の問題で、Identity Managerの問題ではありません)については、「http://logging.apache.org/log4j/docs/api-1.2.8/org/apache/log4j/performance/Logging.html」を参照してください。

ユーザアプリケーションのログ設定ファイルのデフォルトのレベルであるINFO(前述)は、多くの環境で問題になりませんが、パフォーマンスが重要な環境では先ほどのlog4j.xmlのエントリを次のように変更する必要があります。

<root> <priority value="ERROR"/> <appender-ref ref="FILE"/> </root>

つまり、CONSOLEを削除し、ログレベルをERRORに設定します。完全にテストおよびデバッグされた運用環境では、INFOレベルでのログは必要ありません。また、CONSOLEのログを有効にする必要もありません。これらのログを無効にするとパフォーマンスが大きく向上します。

log4jの詳細については、http://logging.apache.org/log4j/docsのドキュメントを参照してください。

Identity ManagerでNovell Auditを使用する際の詳細については、『Novell Identity Manager管理ガイド』を参照してください。

2.3.2 アイデンティティボールト

利用頻度の高いディレクトリサーバ環境では、LDAPクエリがボトルネックになる可能性があります。Novell eDirectory (Identity Managerのアイデンティティボールトのベース)は、オブジェクトが多数でも高いレベルのパフォーマンスを維持するために、頻繁に要求される情報を記録し、インデックスに保存します。複雑なクエリでも、インデックス化された属性を持つオブジェクトに対して実行した場合には、応答は高速になります。

eDirectoryでは、初期状態で、次の属性がインデックス化されています。

Aliased Object Name cn dc Equivalent to Me extensionInfo Given Name GUID ldapAttributeList ldapClassList Member NLS:Common Certificate Obituary Reference Revision Surname uniqueID uniqueID_SS

Identity Managerをインストールすると、デフォルトのディレクトリスキーマが、ユーザアプリケーションに関する新しいobjectclassタイプと新しい属性で拡張されます。ユーザアプリケーション固有の属性は(デフォルトでは)インデックス化されません。パフォーマンスを向上させるため、特に5,000以上のオブジェクトがユーザコンテナに含まれる場合には、こうした属性の一部(また必要に応じて従来のLDAP属性のいくつか)をインデックス化できます。

考え方としては、定期的にクエリされることが分かっている属性だけをインデックス化します(定期的にクエリされる属性は運用環境によって大きく異なります)。どの属性が頻繁に使用されるかを見極める唯一の方法は、ランタイム時に述語統計を収集することです(ただし、収集プロセス自体はパフォーマンスを低下させます)。

述語統計の収集プロセスの詳細については、『eDirectory管理ガイド』を参照してください。このガイドではインデックス化についても詳しく解説しています。一般的には、次の作業が必要です。

  • Console Oneを使用して、該当する属性の述語統計の収集を開始する
  • システムに負荷をかける
  • 統計の収集を無効にして結果を分析する
  • インデックス化しておくと便利な各属性のインデックスを作成する

インデックス化する属性がわかっている場合は、Console Oneを使用する必要はありません。インデックスを作成し管理するには、iManagerで[eDirectoryの保守]>[Indexes (インデックス)]の順にクリックします。たとえば、組織図のユーザがisManager属性に基づいて検索することがわかっている場合は、その属性をインデックス化し、パフォーマンスが向上するかどうかを確かめることができます。

メモ:ベストプラクティスとして、最低限manager属性およびisManager属性をインデックス化することをお勧めします。

属性のインデックス化とパフォーマンスの詳細については、Peter KuoとJim Henderson共著の『Novell’s Guide to Troubleshooting eDirectory』(QUE Books, ISBN 0-7897-3146-0)の「Tuning eDirectory」を参照してください。

eDirectory管理ガイド』の「Novell eDirectoryのメンテナンス」の章に記載されているパフォーマンス調整に関する記述も参照してください。

2.3.3 JVM

Java仮想マシンに割り当てられるヒープメモリの量はパフォーマンスに影響することがあります。最小メモリ値や最大メモリ値の設定値が低すぎたり高すぎたりすると(「高すぎる」とはコンピュータの物理メモリより多いことを意味します)、ページファイルのスワッピングが過剰に発生する可能性があります。

JBossサーバの最大JVMサイズを設定するには、[IDM]/jboss/bin/ にあるrun.confファイルまたはrun.batファイル(前者はLinux用、後者はWindows用)をテキストエディタで編集します。「-Xmx」を128mから512mまたはそれ以上に増やします。ご使用の環境に最適な設定が見つかるまで、調整を繰り返さなければならない場合があります。

メモ:JBossおよびTomcatのパフォーマンス調整のヒントについては、http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossASTuningSlimingを参照してください。

2.3.4 セッションタイムアウト値

セッションタイムアウト(ユーザがWebブラウザのページを表示したままにしてから、サーバによってセッションタイムアウトの警告ダイアログが表示されるまでの時間)は、IDM.warアーカイブのweb.xmlファイルで変更できます。この値は、アプリケーションが実行されるサーバおよび使用環境に合わせて調整する必要があります。一般に、セッションタイムアウト値は実用上差し支えのない限り小さくすることをお勧めします。業務の要件から5分のセッションタイムアウトが可能であれば、サーバはタイムアウト値が10分だった場合よりも2倍早く未使用のリソースを開放できます。これによりWebアプリケーションのパフォーマンスとスケーラビリティが向上します。

セッションタイムアウト値を調整するときは次の点を考慮してください。

  • セッションタイムアウトの時間が長いと、短時間に大勢のユーザがログインした場合、JBossサーバのメモリが不足する可能性があります。これは、開かれたセッションが多すぎれば、どのアプリケーションサーバでも起こり得ます。
  • ユーザがユーザアプリケーションにログインすると、そのユーザのLDAP接続が作成されてセッションにバインドされます。このため、開かれたセッションが多いほど、保持されるLDAP接続の数が多くなります。セッションタイムアウトまでの時間が長いほど、こうした接続が開いたままになっている時間が長くなります。LDAPサーバに対して開いている接続が多すぎると、(接続がアイドル状態であっても)システムのパフォーマンスが低下する可能性があります。
  • サーバおよび使用環境のJVMヒープおよびガーベージコレクション調整パラメータが最適化されているにもかかわらず、サーバでOutOfMemoryErrorsが発生するようになったら、セッションタイムアウト値を低くしてみてください。

セッションタイムアウト値を調整するには、IDM.warアーカイブを開いてweb.xmlファイルを見つけ、ファイルの次の部分を編集する必要があります(デフォルト値である数値の20は、20分を表します)。

<session-config>     <session-timeout>20</session-timeout> </session-config>

ファイルとアーカイブを保存し、サーバを再起動します。

メモ:Webアーカイブファイルの手動編集は、Java Webアプリケーションの開発と展開に熟練したユーザが行ってください。