この章では、Oracle Entitlements Server (OES)のチューニングおよびサイズ設定のガイドラインを示します。内容は次のとおりです。
注意: エンタープライズ・クラスのどのようなビジネス・アプリケーションにおいても、すべてのシステムに通用するような単純なチューニング方法はありません。この章のチューニングに関する項では、構成のサンプルを(場合によっては)示し、Oracle Identity Managerのチューニングの原則の概要について説明します。各自のユースケース・シナリオを検討し、適切な設定を判断してください。 |
Oracle Entitlements Server (OES)は、アプリケーション、サービス指向アーキテクチャ(SOA)およびデータベースの各環境でリアルタイムのファイングレイン認可を可能にする、標準ベースのポリシー駆動型のセキュリティ・ソリューションです。
Oracle Entitlements Serverは、組織のリソースに対するアクセスや使用を制御するポリシーを定義、管理することで、組織がリソースを保護できるようにします。アクセス権限は、誰が、どのリソースに、いつ、どのように行うことができるかを指定することにより、ポリシーに定義されます。ポリシーでは、ソフトウェア・コンポーネント(URL、Javaサーバー・ページ、Enterprise JavaBeans、メソッド、サーブレット、およびアプリケーションの構築に使用されるもの)、ビジネス・オブジェクト(銀行アプリケーションでの銀行口座や医療アプリケーションでの患者レコード、ビジネス関係の定義に使用されるものなどの、ユーザー・アカウントの表現、個人プロファイル、契約)を含む、あらゆるタイプのリソースの制御を実行できます。
Oracle Entitlements Serverの使用の詳細は、『Oracle Fusion Middleware Oracle Entitlements Server管理者ガイド』を参照してください。
効率的なOracle Entitlement Serverのパフォーマンス・チューニングを行うには、まずその使用方法と一般的なパフォーマンスの問題について十分に理解します。Oracle Entitlement Serverのパフォーマンスのチューニングを開始する前に、この項と、第2章「主なパフォーマンス分野」で説明した推奨事項に目を通してください。
ユーザー数 | 全体のユーザー規模、グループ数、メンバーシップ数、属性数、権限受領者、リソース、パーミッション、権限とポリシー、データ型、およびLDAPとデータベースの構成パラメータを把握する必要があります。
規模に関するデータを使用したパフォーマンスの向上の詳細は、第3章「パフォーマンス計画」を参照してください。 |
毎日のアクティビティ使用量 | 24時間の間にアクティブになっているユーザー数、および予想されるトラフィックを把握することは重要です。使用量が急激に増加する時間帯がある場合、パフォーマンスの問題を回避するために、追加のチューニングが必要になることがあります。
パフォーマンス・データの収集の詳細は、第4章「Oracle Fusion Middlewareの監視」を参照してください。 |
ハードウェア・リソースおよびトポロジ | 負荷の高いリアルタイム環境にデプロイされるアプリケーションの場合と同様、許容されるOracle Entitlements Serverのパフォーマンスを実現するには、サーバーのサイズ設定および構成を適切に行うことが重要です。Oracle Entitlements Serverのパフォーマンス・チューニングにおける重要な要素は、使用するハードウェアでボトルネックを回避できるだけの処理能力を提供することです。
ハードウェア・リソースの最適化の詳細は、「十分なハードウェア・リソースの確保」を参照してください。 |
JVMおよびガベージ・コレクション | Oracle Entitlements Serverの最適なパフォーマンスを実現するには、JVMヒープ・サイズおよびガベージ・コレクションを正しくチューニングする必要があります。
詳細は、「ガベージ・コレクションの構成」および「ヒープ・サイズ値の指定」を参照してください。 |
OESキャッシュのチューニング | 最適なパフォーマンスを実現するには、OESキャッシュ(決定キャッシュおよび権限キャッシュ)の把握と、その同じキャッシュのチューニングが必要です。 |
OESの使用状況およびパフォーマンスの問題に応じて、次の基本的なパラメータのチューニングを検討してください。チューニングに関するその他の考慮事項については、第2章「主なパフォーマンス分野」を参照してください。
この項には次のトピックが含まれます:
OESポリシー・ストアは、パフォーマンス・チューニング全体の中で最初にチューニングする必要があるコンポーネントです。ポリシー・ストアのチューニングには、基礎となるデータベースとEclipseLinkのチューニングが関係します。次の各項では、ポリシー・ストアのチューニングの一環として、チューニングの個々の側面について説明します。
この項には次のトピックが含まれます:
第2.6項「データベース・パラメータのチューニング」で説明されている標準的なデータベース・チューニング・パラメータに加え、OESの使用時には、表30-1に示すプロパティもチューニングする必要があります。
表30-1 Oracle Databaseのシステム・パラメータ
プロパティ名 | 値 |
---|---|
|
1500 |
|
3221225472 (3GB) |
|
なし |
|
500 |
|
1610612736 (1.5GB) |
|
BINARY |
|
SETALL |
|
3600 |
|
ALWAYS |
|
500 |
|
NATIVE |
|
False |
|
0 |
|
|
注意: 前述の値は、一般的なチューニング構成を示しています。そのため、例外と制限事項が存在します。たとえば、SGAとPGAのサイズは、基礎となるオペレーティング・システムにおける使用可能な最大メモリー容量によって制限されます。一部のプラットフォームでは、各プロセスを接続プールの設定に基づいて計算できます。チューニングは、DBAが必ず検証する必要があります。 |
Oracle Databaseチューニングの詳細は、第2.7項「データベース接続の再利用」を参照してください。
OES DBスキーマは、RCU (リポジトリ作成ユーティリティ)を介して作成されます。RCUを使用してデータベース・スキーマを作成するには、次の作業を行います。
OES表領域用に大きなディスク領域を割り当てることにより、最適なパフォーマンスを実現します。IAS_OPSS
およびIAS_TEMP
の各表領域には、6GBファイルを使用します。
ポリシー・ストアで多くの大規模なアプリケーションを管理する場合は、大量の表領域を割り当てます。たとえば、IAS_OPSS
表領域には40 GBを、IAS_TEMP
表領域には15 GBを割り当てることができます。
アプリケーションをポリシー・ストアに追加する場合は、満杯になった表領域を絶えず拡張しなくてもよいように、表領域の増分値を100MBではなく1GBに設定します。
前述の各項に記載されている手順の実行後は、OESデータベース(DB)スキーマで必要とされるチューニングは完了しているはずです。OES DBスキーマ・ユーザーとしてのDB統計の実行は、監視が必要な継続的な業務です。ポリシー・データは、DBに格納されているからです。
JPS_DN.PARENTDN
列については、スキーマ統計を収集しないでください。JPS_DN.PARENTDN
列のヒストグラムを収集すると、問合せのパフォーマンスに影響が生じます。ヒストグラムを無効にするには、次のSQLスクリプトを使用します。
EXECUTE dbms_stats.delete_column_stats(ownname=>'<SCHEMA_NAME>', tabname=>'JPS_DN', colname=>'PARENTDN', col_stat_type=>'HISTOGRAM');
SQLスクリプトは1回のみ実行します。
コマンドDBMS_STATS.gather_schema_stats('<SCHEMA_NAME>',DBMS_STATS.AUTO_SAMPLE_SIZE,no_invalidate=>FALSE)
を実行します。
DB job
がdB stats
を必要な頻度で実行するように定義することにより、このコマンドを自動化できます。この収集操作は、ストアに大量のポリシー・データを移行した後に実行する必要があります。
OESでは、EclipseLink
がDatabase操作用のJPA (Java Persistence API)の実装として使用されます。表30-2には、jps-config.xml
を介して設定可能なEclipseLink
チューニング・パラメータが定義されています。
表30-2 EclipseLinkのチューニング
プロパティ | 説明 | デフォルト |
---|---|---|
|
内部接続プール内の最大読取り接続数 |
32 |
|
内部接続プール内の最小読取り接続数 |
32 |
デフォルトのプロパティ値は、OES管理用にDBポリシー・ストアのサービス・インスタンスを設定するか、制御プル・モードでPDPサービスを設定することにより上書きできます。次に例を示します。
<propertySet name="props.db.1"> <property name="jdbc.url" value="jdbc:oracle:thin:@slc04jpa.example.com:1521/orcl2"/> <property name="oracle.security.jps.farm.name" value="cn=my_domain"/> <property name="server.type" value="DB_ORACLE"/> ... ... <property name=" eclipselink.jdbc.connection_pool.default.min" value="16"/> <property name=" eclipselink.jdbc.connection_pool.default.min" value="64"/> </propertySet> ... ... <serviceInstance name="policystore.db" provider="policystore.provider"> <property name="policystore.type" value="DB_ORACLE"/> <propertySetRef ref="props.db.1"/> </serviceInstance>
EclipseLinkプロパティの詳細は、http://www.eclipse.org/eclipselink/api/2.3/org/eclipse/persistence/config/PersistenceUnitProperties.html
を参照してください。
この項では、大量のポリシー・データを対象に移行や配布などの操作を行う際に、JVMパラメータをチューニングして最適なパフォーマンスを実現する方法について説明します。
この項には次のトピックが含まれます:
WebLogic Scripting Tool (WLST)は、Oracle Middlewareのコマンド行スクリプト・インタフェースです。OESでは、セキュリティ・ストアの移行を含む一部の管理作業で使用されます。大規模なアプリケーションの移行では、次のようにJVMパラメータをチューニングして、WLSTツール用のJavaメモリー・サイズを設定する必要があります。
HotSpot: "-Xms6144m -Xmx6144m -Xmn1900m -XX:PermSize=128m -XX:MaxPermSize=1024m" JRockit: "-Xms6144m -Xmx6144m -Xns1900m"
必要なヒープ・サイズ・パラメータ(ms, mx, mn
)は、移行するアプリケーションのサイズに基づいて設定できることに注意してください。表30-3は、サンプル・データを示しています。
大規模なアプリケーションのポリシー配布を行うには、OES管理サーバーをチューニングして最適なパフォーマンスを実現する必要があります。OES管理サーバーのチューニングに関するガイドラインを次に示します。
JDKバージョン1.6.0_31以上を使用します。
次の図に、JDKメモリー・サイズのチューニングに関する情報を示します。アプリケーション・ポリシーのスナップショットを生成するには、管理サーバーに大量のメモリーが必要になります。
HotSpot: "-Xms6144m -Xmx6144m -Xmn1900m -XX:PermSize=128m -XX:MaxPermSize=1024m" JRockit: "-Xms6144m -Xmx6144m -Xns1900m"
OESセキュリティ・モジュールが制御プル・モードで構成されている場合、これには次の2つの主要な機能があります。
PDPまたはPEP(あるいはその両方)として動作します。つまり、認可リクエストを受け取った後で決定を下し、その決定を実行します。
ポリシー配布コンポーネントを定期的にコールして、構成されたポリシーとポリシー・データを評価のために使用可能にします。
OESセキュリティ・モジュールをチューニングする際には、高スループットの認可リクエスト処理が行われていることと、効率的にポリシーが配布されていることを確認してください。
ポリシー・データのサイズは、セキュリティ・モジュールのパフォーマンスに影響します。関数、属性、ロール、リソースおよびポリシーの数は、認可のスループットに大きく影響します。セキュリティ・モジュールでは、配布時間とメモリー・サイズを見積もる必要があります。
例:
Application Name: myapp oracle.security.jps.ldap.root.name: cn=jpsroot oracle.security.jps.farm.name: cn=base_domain
表30-4 セキュリティ・モジュールのチューニング属性
項目 | 数値 | コメント | 問合せSQL |
---|---|---|---|
リソース・タイプ |
1 |
||
属性定義 |
17 |
||
関数定義 |
269 |
select count |
|
アプリケーション・ロール |
0 |
アプリケーション・ロールは作成されません。Weblogic Serverのロールとプリンシパルが使用されます。 |
|
権限受領者 |
5351 |
ポリシーのプリンシパルは権限受領者として格納されます(1つのプリンシパルにつき1つのポリシー)。 |
select count |
パーミッション |
1772 |
ポリシーで使用されるリソース・アクションのペア。 |
select count |
リソース |
3173 |
select count |
|
権限 |
1806 |
select count |
|
ポリシー |
5351 |
select count |
|
ルール |
5351 |
select count |
|
属性 |
1,484,356 |
前述のエントリの属性 |
select count |
割当て先の属性 |
1,220,877 |
ポリシー割当ての属性 |
select count |
前述のポリシー・データに対して、表30-5に示すように、サンプル・ランタイム・キャッシュのメモリー・サイズを計算できます。
表30-5 サンプル・ランタイム・キャッシュのメモリー・サイズ計算
キャッシュ・タイプ | 合計ヒープ・サイズ | 計算式 |
---|---|---|
リソース・ポリシー・キャッシュ |
476.91M |
0.4K * 割当て先数 |
権限キャッシュ |
143.78M |
0.12K * 割当て先数 + 0.41K * 権限数 |
リソース・キャッシュ |
0.13M |
44 * リソース数 |
ポリシー・キャッシュ |
1.46MB |
286 * ポリシー数 |
リソース・タイプ・キャッシュ |
少量なので無視 |
|
関数キャッシュ |
少量なので無視 |
|
属性キャッシュ |
少量なので無視 |
大規模なデータ操作のパフォーマンスを改善するには、セキュリティ・モジュールで合計6GBのヒープ・サイズが必要です。
セキュリティ・モジュール(WLS/Tomcat/Java)用のJVMチューニング
HotSpot JVM
"-Xms6144m -Xmx6144m -Xmn1900m -XX:PermSize=128m -XX:MaxPermSize=1024m -XX:+UseParallelGC "
-XX :+UseParallelGC
: スカベンジ用にパラレル・ガベージ・コレクションを使用します。このコレクション・アルゴリズムは、スループットを最大化するように設計されています。同時に、休止を最小限に抑えるため、セキュリティ・モジュールに適したGCアルゴリズムです。
JRockit:
"-Xms6144m -Xmx6144m -Xns1900m"
この項には次のトピックが含まれます:
PDPサービス構成
oracle.security.jps.pd.client.PollingTimerInterval
:
このプロパティは、PDの定期的な確認の間隔を指定します。デフォルト値は600秒です。ポリシー・データの変更頻度にあわせて、これを必要に応じて増減できます。
WSSM用のPDPサービス構成:
表30-6に、WSSMで使用可能なパラメータを示します。
表30-6 WSSMで使用可能なパラメータ
プロパティ | 説明 |
---|---|
|
アイデンティティ・キャッシュを使用している場合に設定されるフラグ。設定されない場合、デフォルトでアイデンティティ・キャッシュは有効にされます。 |
|
最大キャッシュ・サイズを指定します。 デフォルト値は20000です。 すべてのサブジェクトの数に応じて、このパラメータをチューニングします。 |
|
キャッシュが最大サイズに達したときに削除する必要があるアイデンティティの比率を指定します。デフォルト値は20パーセントです。 |
|
キャッシュ内のアイデンティティ・レコードの存続時間を秒数で指定します。 デフォルト値は3600秒です。 |
|
wssmの |
この項では、セキュリティ・モジュールの決定キャッシュ属性について説明します。
次のプロパティを、PDPのjps-config.xml
に設定します。
<property name="oracle.security.jps.pdp.AuthorizationDecisionCacheEnabled" value="true"/> <property name="oracle.security.jps.pdp.AuthorizationDecisionCacheEvictionCapacity" value="1500"/> <property name="oracle.security.jps.pdp.AuthorizationDecisionCacheEvictionPercentage" value="10"/> <property name="oracle.security.jps.pdp.AuthorizationPerUserDecisionCacheSize" value="1500"/> <property name="oracle.security.jps.pdp.AuthorizationDecisionCacheTTL" value="300"/>
表30-7 プロパティの概要
プロパティ名 | 説明 | 許容値 | オプション/必須 | コメント |
---|---|---|---|---|
|
ポリシー決定キャッシュを有効化するかどうかを指定します。 |
true/false Default: true |
オプション |
DW PS1以降 |
|
これは、決定キャッシュ・サイズがこのサイズに達した場合に決定キャッシュを削除するのに使用する数です。 |
数値 Default:500 |
オプション |
DW PS1以降 |
|
決定キャッシュが最大容量に達した場合に削除する認可決定の比率。 |
数値 Default:10 |
オプション |
DW PS1以降 |
|
これは決定キャッシュのTTL (秒)です。 |
数値 Default:60 |
オプション |
DW PS1以降 |
|
これは、第2レベルの決定キャッシュ・サイズがこのサイズに達した場合に各ユーザー(サブジェクト)の決定キャッシュを削除するのに使用する数です。 |
数値 Default:1000 |
オプション |
DW PS2以降 |
ネットワーク全体のパフォーマンスは、システム・パフォーマンスを左右する主要な要因です。ネットワーク待機時間が短縮されると、ネットワーク・パフォーマンスが向上する場合があります。
ネットワーク待機時間を制御するには、次のことを検討します。
OESサーバーの近くにデータベース・リポジトリを配置します。OESサーバーをリモート・サーバーにインストールすると、待機時間が長くなる場合があります。最適なパフォーマンスを維持するには、アプリケーション層とデータベース層の間の待ち時間を5ミリ秒以下に抑えてください。
SSLアクセラレータかロード・バランサをOracle Entitlement Serverシステムの外部に追加することにより、ネットワークのパフォーマンスを改善できます。
Oracle Entitlement ServerなどのWebベース・アプリケーションのパフォーマンスと可用性を改善する場合、Webサーバーやアプリケーション・サーバーの前方にロード・バランサを配置するのが最善の方法です。ただし、Oracle Entitlement Serverのコンポーネント間にロード・バランサを配置することはお薦めしません。
OESサーバーをデータベースではなくクライアント・アプリケーションの近くに配置します。
一連のリソースに対して認可チェックを行うPepRequestFactory.newQueryPepRequest().decide()
のプロセスが最適化されました。
この機能はデフォルトでは無効化されており、制御された配布モードにあるSMインスタンスに対して有効にする必要があります。
有効にするには、SMインスタンスのjps-config.xml
を更新してください。PDPサービス・インスタンスでは、次のプロパティを追加します。
<serviceInstance name="pdp.service" provider="pdp.service.provider">
... ...
property name="oracle.security.jps.runtime.enableResourcePermissionCache" value="true"/>
移行、スナップショット生成および配布を含む一部の主要な操作では、パフォーマンス測定用にログが必要になります。
WLSTを介した移行では、INFOレベルのログがあります。次に示すように、タイムスタンプ付きのログをWLSTコンソールに直接出力できます。
Apr 19, 2013 3:07:00 AM oracle.security.jps.internal.tools.utility.JpsUtilMigrationPolicyImpl migrateAppPolicyData INFO: Migration of Application Policies in progress..... ... ... Apr 19, 2013 3:07:39 AM oracle.security.jps.internal.tools.utility.util.JpsMigrateUtil cloneResourceType INFO: Migration of Resources started Apr 19, 2013 3:08:12 AM oracle.security.jps.internal.tools.utility.util.JpsMigrateUtil cloneResourceType INFO: Migration of Resources completed in 00:00:33 ... ... Apr 19, 2013 3:08:44 AM oracle.security.jps.internal.tools.utility.util.JpsMigrateUtil clonePermissionSet INFO: Migration of Permission Sets completed in 00:00:31 ... ... Apr 19, 2013 3:11:35 AM oracle.security.jps.internal.tools.utility.destination.apibased.JpsDstPolicy clone INFO: Completed Migrating 5,351 policies in [170,914] ms. ... ... Apr 19, 2013 3:20:57 AM oracle.security.jps.internal.tools.utility.destination.apibased.JpsDstPolicy clone INFO: Migration of Grants completed in 00:09:22 ... ... Apr 19, 2013 3:20:57 AM oracle.security.jps.internal.tools.utility.JpsUtilMigrationPolicyImpl migrateAppPolicyData INFO: Migration of Application Policies completed, Time taken for migration is 00:13:57
スナップショット生成測定のロギングの有効化
次に、ポリシー配布の一環としてのスナップショット生成のタイミングを測定するために有効化する必要のあるロギング・プロパティを示します。次に示すログ・レベル設定で、Javaのlogging.properties
ファイルを作成します。
handlers= java.util.logging.FileHandler .level= INFO ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################# default file output is in user's home directory java.util.logging.FileHandler.pattern =<Log_home>/performance.log java.util.logging.FileHandler.limit = 10000000 java.util.logging.FileHandler.count = 200 java.util.logging.FileHandler.formatter =java.util.logging.SimpleFormatter java.util.logging.FileHandler.level = FINE java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter ############################################################ # Facility specific properties. ############################################################ # Provides extra control for each logger. ############################################################ # For example, set the com.xyz.foo logger to only log SEVERE # messages: oracle.security.jps.internal.policystore.SnapshotWorker.level=FINEST
<DOMAIN_HOME>/bin/startWeblogic.sh
でログを有効化します
${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} -Djava.util.logging.config.file=./logging.properties -Dweblogic.Name=${SERVER_NAME} -Djava.security.policy=${WL_HOME}/server/lib/weblogic.policy ${JAVA_OPTIONS} ${PROXY_SETTINGS} ${SERVER_CLASS}
ログ・ファイルでは、アプリケーション・ポリシーのスナップショットの生成時に次のログ・メッセージが表示されるはずです。
Jan 31, 2013 1:07:49 AM oracle.security.jps.internal.policystore.SnapshotWorker run FINE:SnapshotWorker begin. .......... Jan 31, 2013 1:12:43 AM oracle.security.jps.internal.policystore.SnapshotWorker run FINE: SnapshotWorker end.
配布のロギングの有効化
次に、ポリシー配布の一環としてのスナップショット生成のタイミングを測定するために有効化する必要のあるロギング・プロパティを示します。logging.properties
ファイルを作成して、次の行を追加します。
oracle.security.jps.az.internal.runtime.pd.receiver.UpdatePolicySet.level=FINEST
各セキュリティ・モジュール・タイプに応じて異なるスクリプトを更新する必要があります。
Java SM
java SMの起動スクリプトを編集して、ログ・プロパティを追加します。
例として、<OES_CLIENT_HOME>/oes_sm_instances/<SM_NAME>/run-j2se.sh
があります。
${JAVA_HOME}/bin/java -Doracle.security.jps.config=${OES_INSTANCE_HOME}/config/jps-config.xml ${MEM_ARGS} -Djava.util.logging.config.file=./config/logging.properties oracle.security.oes.tools.OESJ2SESampleApp PD
このログ・プロパティ・ファイルで、oracle.security.jps.az.internal.runtime.pd.receiver.UpdatePolicySet.level=FINEST
を有効化します。
WS SM
<OESCLIENT>/oes_sm_instances/<wssm>/startWSServer.sh
に、次の行を追加します。
JAVA_OPT="$JAVA_OPT -Djava.util.logging.config.file=./config/logging.properties"
Weblogic SM
最後の<DOMAIN_HOME>/bin/startWeblogic.sh
ファイルを編集します。
${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} -Djava.util.logging.config.file=./config/logging.properties
Tomcat SM
<TOMCAT_HOME>/ bin/catalina.sh
ファイルを編集し、最後のJAVA_OPTS
行の後に次の行を追加します。
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.config.file=./config/logging.properties".
Jan 31, 2013 10:11:19 PM oracle.security.jps.az.internal.runtime.pd.receiver.UpdatePolicySet commit FINE: Starting ... ........... Jan 31, 2013 10:20:06 PM oracle.security.jps.az.internal.runtime.pd.receiver.UpdatePolicySet commit FINE: completed. Active Apps: [[]], Bounded Apps [[fidelity5000] Jan 31, 2013 10:20:07 PM oracle.security.jps.az.internal.runtime.pd.receiver.UpdatePolicySet commit FINE: afterCommit is finished Jan 31, 2013 10:20:07 PM oracle.security.jps.az.internal.runtime.pd.receiver.UpdatePolicySet finishFirstDist