7 Oracle Unified Directory用のJVM、Javaおよびデータベース・キャッシュのオプションの構成

Oracle Unified Directoryは、サーバーをチューニングし、Java仮想マシン(JVM)、Javaおよびデータベース・キャッシュ用のさまざまなオプションを構成するための、複数のコマンドライン・ユーティリティを提供します。

内容は次のとおりです。

ノート:

12c (12.2.1.3.0)以降、Oracle Unified DirectoryではJDK 8またはJRE 8が必要です。

7.1 dstuneユーティリティを使用したJVMの構成

dstuneコマンド行ユーティリティでは、ディレクトリに含まれているデータや使用するシステム・メモリー量などの条件を使用して、Oracle Unified Directoryサーバーおよびツール(import-ldifexport-ldifrebuild-indexおよびverify-index)をチューニングできます。

dstuneユーティリティには、次のオプションがあります。

  • data-basedサブコマンドは、データベースがすでに含まれているか、これから含まれるかを示すデータに基づいてサーバーをチューニングします。

  • mem-basedサブコマンドは、使用するヒープ・サイズに基づいてサーバーおよびツールをチューニングします。

  • set-runtime-optionsサブコマンドを使用すると、システム上のJVMのデフォルト値を使用するか、直接JVMに引数を渡してサーバーおよびツールをチューニングするかを指定できます。

ノート:

dstunememory-basedおよびdata-basedオプションは、Javaプラットフォーム、Standard Edition(Java SE)など、Java HotSpotを使用するJVMを実行する場合にのみ使用可能です。

dstune構文およびチューニング例の詳細は、『Oracle Unified Directoryの管理』dstuneユーティリティを使用したJava仮想マシンの設定のチューニングを参照してください。

7.2 デフォルトのJVMおよびJava引数の構成

Javaプロパティ・ファイルを使用して、Oracle Unified Directoryサーバー用にJava仮想マシン、JavaオプションおよびJava引数を構成します。

7.2.1 Javaプロパティ・ファイルの使用

java.propertiesファイルには、Java構成プロパティが含まれます。Oracle Unified Directoryのスクリプトおよびサーバー・コマンドでは、これらのJava構成プロパティを使用します。このファイルは、UNIXおよびLinuxシステムのinstance-dir/OUD/config/、またはWindowsシステムのinstance-dir\OUD\config\にあります。

java.propertiesファイルのプロパティには、次の形式があります。

  • command-name.java-home=JVM-path

  • command-name.java-args=JVM-arguments

java.propertiesファイルの構成プロパティを使用するには:

  1. 設定するファイル内のプロパティを編集します。

    たとえば、Javaプロパティを設定し、JVMの実行コマンドを-serverモードで実行するか、-clientモードで実行するかを指定できます。

    または、特定のコマンド(import-ldifexport-ldifbackupおよびrestoreなど)では、コマンドがオンライン・モードで実行されるか、またはオフライン・モードで実行されるかに応じて異なるJava引数(および異なるJVM)を指定することもできます。

  2. java.properties内のプロパティを使用するdsjavaproperties(またはdsjavaproperties.bat)コマンドを実行し、Oracle Unified Directoryのスクリプトやコマンドを更新すると、java.propertiesに指定された特定のJVMおよびJVM引数が使用されます。

例として、「特定ユーティリティ用のJava仮想マシンの指定」および「特定ユーティリティ用のJava引数の指定」を参照してください。

『Oracle Unified Directoryの管理』dsjavapropertiesに関する項も参照してください。

表7-1に、java.propertiesファイル内のOracle Unified Directoryに関連するプロパティを示します。

表7-1 java.propertiesファイル内のOracle Unified Directoryに関連するプロパティ

プロパティ 説明

overwrite-env-java-args

trueの場合、OPENDS_JAVA_ARGS環境変数のチェックの前に、このプロパティ・ファイル内のdefault.java-argsプロパティがチェックされます。

falseの場合、最初にOPENDS_JAVA_ARGS環境変数がチェックされます。

default.java-home

特定のユーティリティに対して別のJVMが指定されている場合を除き、ディレクトリ・サーバーおよびそのすべてのコマンドライン・ユーティリティに使用されるJVMが設定されます。

7.2.2 JVMオプションの構成

Oracle Unified Directoryでは、サーバーのパフォーマンスに影響を与えるいくつかのJavaオプションが用意されています。各オプションは特定の条件に適用され、これらのオプションの一部はOracle JVMにのみ適用されます。

表7-2では、サーバーのパフォーマンスに影響を与える可能性があるJavaオプションの概要を示します。

表7-2 Oracle Unified Directoryサーバーのパフォーマンスに影響を与えるJavaオプション

条件 オプション 説明

サーバー・グレードのJVMランタイム最適化を使用するサーバーおよびオフラインのインポート

-server

クライアント・アプリケーションの実行時の最適化が選択されます。ディレクトリ・サーバーは起動の時間が長くなりますが、より最適化されスループットが向上します。

64ビット・マシンのみが対象です

-d64

64ビット・マシンのみが対象です。デフォルトでは、アーキテクチャに関係なくディレクトリ・サーバーにより32ビットのJVMが選択されます。JVMに4GBを超えるヒープを必要とし、アーキテクチャが64ビットのとき、このオプションを指定してください。

JVMヒープ

-Xms2G -Xmx2G

JVMに使用できる初期メモリー・サイズおよび最大メモリー・サイズがそれぞれ選択されます。これらの値はJVMヒープに使用され、ディレクトリ・サーバーとそのデータベース(DB)キャッシュ(単数または複数)のメモリーが予約されます。

使用可能なメモリー量を増やすとパフォーマンスが向上する場合がありますが、増やしすぎると、フル・ガベージ・コレクションを実行するための一時停止時間が長くなるという悪影響が生じる可能性があります。したがって、初期サイズおよび最大サイズは同じ値に設定する必要があります。

一般的なガイドラインとして、Oracle Berkeley Java Edition (JE)データベース・フォルダ(instance-dir/OUD/db/userRoot)のサイズを調査します。フォルダの結合サイズに基づいて、データベース・キャッシュとして予約するメモリー量を決定します。この値を決定した後、ローカルDBバックエンド・プロパティdb-cache-percentまたはdb-cache-size、およびその他のJVMオプションを適宜チューニングします。

サーバー・ランタイムに許容する追加メモリーには注意してください。たとえば、1GBの単一データベースがあり、それを完全にメモリーに格納する場合、ディレクトリ・サーバーの効率的なパフォーマンスを得るには、データベース・キャッシュ用に60%を予約した2GBのヒープで十分です。

この設定をテストするには、preload-time-limitプロパティを使用してローカル・データベース・バックエンドをデータベースにプリロードします。

4GBを超えるJVMヒープには64ビットのJVMが必要です。

jstatdまたは他のRMIベース・アプリケーション

DisableExplicitGC

外部アプリケーションで負荷のかかるガベージ・コレクションが強制されることを防ぎます。jstatdまたはその他のRMIベースのアプリケーションを使用してOracle Unified Directoryをモニターしている場合、予期しない一時停止を回避するために、このオプションの使用を検討してください。

スループットが遅い環境

-XX:NewSize=512M

スループットが遅い環境では、このオプションを使用してJVMの若い世代のサイズを増やすことを検討してください。

デフォルトでは、若い世代はかなり小さく、スループットの高いシナリオでは大量のガベージが生成される可能性があります。今度はこのガベージ・コレクションにより、JVMにおいて一時オブジェクトが誤って古い世代に格納されます。

サーバーのみ

-XX:+UseConcMarkSweepGC

CMSガベージ・コレクタが選択されます。このガベージ・コレクタは、一時停止時間を短縮するために設定されます。これによりJavaアプリケーションの平均スループットが低下しますが、CPUに負担をかけるガベージ・コレクションの時間が大幅に短縮されます。このオプションは、レスポンス時間に制約がある環境では必須です。

GC分析およびチューニング

-XX:CMSInitiatingOccupancyFraction=70

コレクションが開始されるレベルが選択されます。デフォルト値は68%です。

オフラインのインポートのみ

-XX:+UseParallelOldGC

古い世代の並列ガベージ・コレクタが選択されます。このガベージ・コレクタは、スループットを上げるために設定されます。これにより、インポートほど重要ではなく、発生頻度の低いstop-the-worldガベージ・コレクションを犠牲にして、import-ldifユーティリティの平均スループットが最大化されます。

GC分析およびチューニング

-XX:+PrintGCDetails

ガベージ・コレクションの詳細が印刷されます。

GC分析およびチューニング

-XX:+PrintGCTimeStamps

デバッグに役立つガベージ・コレクションのタイム・スタンプが印刷されます。

その他のアプリケーション(dsconfigなど)

-client

クライアント・アプリケーションの実行時の最適化が選択されます。コンパイルのオーバーヘッドが低下するため、アプリケーションの起動が速くなり、レスポンスが向上します。

非常に小さい初期JVMヒープ・サイズ

-Xms8m

アプリケーションに対して小さい初期JVMヒープ・サイズが選択されます。

7.2.3 特定ユーティリティ用のJava仮想マシンの指定

java.propertiesファイルでJavaホームのプロパティを編集して、特定ユーティリティ用のJava仮想マシンを設定します。

特定のユーティリティ用にJVMを構成するには:

  1. java.propertiesファイルで次のプロパティを編集します。
    command-name.java-home=jvm-location
    

    たとえば、JDK 1.8固有のオフラインのimport-ldifコマンドを構成するには、import-ldif.offlineで始まるプロパティを設定します。たとえば:

    import-ldif.offline.java-home=/usr/java/jdk1.8.0
    
  2. dsjavapropertiesユーティリティを実行してプロパティの値を適用します。

7.2.4 特定ユーティリティ用のJava引数の指定

java.propertiesファイルでJava引数のプロパティを編集して、特定ユーティリティ用のJava引数を指定します。

特定のユーティリティ用にJava引数を構成するには:

  1. java.propertiesファイルで次のプロパティを編集します。
    command-name.java-args=arguments
    

    たとえば、オンライン・エクスポートに使用する最大ヒープ・サイズを256MBに指定するには、export-ldif.onlineで始まるプロパティを設定します。たとえば:

    export-ldif.online.java-args=-Xms256m -Xmx256m
    
  2. dsjavapropertiesユーティリティを実行してプロパティの値を適用します。

7.3 サーバー設定中のJavaランタイム設定の構成

ディレクトリ・サーバーの設定スクリプト(oud-setupまたはoud-setup.bat)の実行時に、ランタイムのオプションを指定できます。

7.4 データベース・キャッシュのサイズ

データベース・キャッシュのサイズは、Oracle Unified Directoryサーバーの全体的なパフォーマンスに影響を与えます。使用しているハードウェア、ディレクトリ内のエントリ数やサイズ、およびデプロイメントのパフォーマンス要件に応じて、それ固有のデータベース・キャッシュのメモリー設定が必要です。

たとえば、import-ldifユーティリティを使用してデータをインポートするときに発生する可能性のある、データベース・キャッシュの追い出し問題を回避する(または最小化する)ようにディレクトリ・サーバーを構成できます。理想的には、データベース・キャッシュを、データベース全体が確実にキャッシュに収まるような値に設定します。

必要なヒープ・サイズは、エントリ数とそのサイズによって決まります。たとえば、それぞれが10KBの200,000エントリをインポートする場合、JVMのヒープ・サイズに2GBを指定し、ディレクトリ・サーバーのランタイム環境に少なくとも1GBを割り当て、残りをデータベース・キャッシュに割り当てます。

データベース・キャッシュは、dsconfigコマンドライン・ユーティリティまたはOracle Unified Directory Services Managerのいずれかを使用し、db-cache-percentプロパティまたはdb-cache-sizeプロパティを構成することで設定できます。

db-cache-percentプロパティおよびdb-cache-sizeプロパティは、サーバーがデータベース・キャッシュに使用できる最大サイズを表します。このいずれかのプロパティで設定されたサイズよりもデータベースが小さい場合、データベースのサイズのみがJVMヒープに割り当てられます。

ノート:

db-cache-sizeプロパティはdb-cache-percentプロパティより優先されます(両方に値が指定されている場合)。このため、db-cache-percentプロパティを設定する場合は、db-cache-sizeプロパティは0MB(デフォルト)に設定する必要があります。

「dsconfigを使用したデータベース・キャッシュの設定」を参照してください。

7.4.1 dsconfigを使用したデータベース・キャッシュの設定

dsconfigコマンドのデータベース・キャッシュ・パーセント・プロパティを使用して、データベース・キャッシュにメモリーを割り当てます。

dsconfigを使用してデータベース・キャッシュを設定するには:

  1. dsconfigのあるディレクトリに変更します。

    UNIXおよびLinuxシステムの場合:

    $ cd instance-dir/OUD/bin
    

    Windowsシステムの場合:

    C:\> cd instance-dir\OUD\bat
    
  2. dsconfigコマンドを実行してdb-cache-percentプロパティを設定します。たとえば:
    $ dsconfig set-workflow-element-prop \
    --element-name userRoot --set db-cache-percent:50 \
    --hostname hostname --port port-number \
    -X -D "cn=Directory Manager" -j /tmp/password -n
    

    この例では、db-cache-percentを50パーセントに設定しています。したがって、2GBのメモリー割当ての場合、1GBのメモリーがディレクトリ・キャッシュに割り当てられ、残りがJVMに割り当てられます。

7.5 データベース・キャッシュ・モードの設定

データベース・キャッシュ・モード(db-cache-modeプロパティ)は、データベース・キャッシュ内のレコードのキャッシュを制御します。データベース・キャッシュを使用して、Java Edition(JE)のノード(上位、内部およびリーフ・ノード)を格納できます。レコードが格納または取得されるとき、データベース・キャッシュ・モードにより、キャッシュ内の他のレコードとの相対で、そのレコードがその後キャッシュに保持される期間が決定されます。

デフォルトのデータベース・キャッシュ・モードでは、キャッシュ内のすべてのタイプのノードが保持されます。ほとんどのデプロイメントで、デフォルトのモードが推奨されます。しかし、パフォーマンスが期待どおりではない場合、またはOracle Unified Directoryの実行に使用可能なメモリーではデータベース・キャッシュ内のすべてのエントリを保持できない場合には、モードの変更を検討する余地があります。

考慮すべき他のデータベース・キャッシュ・モードは次のとおりです。

  • evict-lnモードは、使用されたリーフ・ノードをデータベース・キャッシュから追い出します。デフォルト・モードでのパフォーマンスが期待どおりではなく、Oracle Unified Directoryに割り当てられたメモリーがデータベースのサイズよりも小さい場合にのみ、このモードを使用します。このモードを使用すると、メモリー不足によるJavaのガベージ・コレクションや処理の経過時間(etime)の異常値を低減します。

  • evict-lnモードは、使用された下位の内部ノードをデータベース・キャッシュから追い出します。このモードを使用する前に、evict-lnモードを試してみることをお薦めします。Oracle Unified Directoryに割り当てられたメモリーがデータベースのサイズよりもかなり小さく、パフォーマンスが期待どおりではない場合に、ステージング・デプロイメントでのみ、このモードを使用します。

データベース・キャッシュ・モードに指定できるその他の値は、『Oracle Unified Directory構成リファレンス』DBのローカル・バックエンドのワークフロー要素に関する項を参照してください。

データベース・キャッシュ・モードを設定するには、dsconfigコマンドライン・ユーティリティを使用します。たとえば、モードをevict-lnに設定するには次のようにします。

$ dsconfig set-workflow-element-prop \
  --element-name userRoot \
  --set db-cache-mode:evict-ln \
  --hostname localhost --port 4444 \
  -X -D "cn=Directory Manager" -j password-file -n

『Oracle Unified Directoryの管理』データベース・キャッシュの管理に関する項も参照してください。