3.2. 環境変数を使用した JBoss EAP for OpenShift の設定

JBoss EAP for OpenShift イメージを設定する方法として、環境変数の使用が推奨されます。アプリケーションコンテナーおよびビルドコンテナーに 環境変数を指定 する方法については、OpenShift ドキュメントを参照してください。

たとえば、OpenShift アプリケーションの作成時に、環境変数を使用して JBoss EAP インスタンスの管理ユーザー名およびパスワードを設定することができます。

oc new-app --template=eap73-basic-s2i \
 -p IMAGE_STREAM_NAMESPACE=eap-demo \
 -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts \
 -p SOURCE_REPOSITORY_REF=7.3.x-openshift \
 -p CONTEXT_DIR=kitchensink \
 -e ADMIN_USERNAME=myspecialuser \
 -e ADMIN_PASSWORD=myspecialp@ssw0rd
注記

この例では、JDK 8 テンプレートを使用します。JDK 11 の場合は、eap73-openjdk11-basic-s2i テンプレートを使用します。

JBoss EAP for OpenShift イメージの利用可能な環境変数は、参考情報 のリストを参照してください。

3.2.1. JVM のメモリー設定

OpenShift EAP イメージには、現在の環境に基づいてデフォルトの JVM メモリー設定を自動的に計算するメカニズムがあります。ただし、環境変数を使用して JVM メモリーを設定することも可能です。

3.2.1.1. JVM のデフォルトメモリー設定

現在のコンテナーに対してメモリー制限が定義されており、この制限が利用可能なメモリーの合計よりも小さい場合、デフォルトの JVM メモリー設定は自動的に算出されます。それ以外の場合、デフォルトの JVM メモリー設定は、イメージのベースサーバーとして使用される EAP バージョンの standalone.conf ファイルで定義されます。

コンテナーのメモリー制限は、/sys/fs/cgroup/memory/memory.limit_in_bytes ファイルから取得されます。利用可能なメモリーの合計は、/proc/meminfo コマンドで取得されます。

メモリー設定が自動的に算出されると、以下の式が使用されます。

  • 最大ヒープサイズ (-Xmx): ユーザーメモリーの 50%
  • 初期ヒープサイズ (-Xms): 計算済み最大ヒープサイズの 25%。

たとえば、定義したメモリー制限が 1 GB で、この制限が /proc/meminfo に示されている利用可能なメモリー合計よりも低い場合、そのメモリー設定は -Xms128m -Xmx512 になります。

以下の環境変数を使用して、自動的に計算された JVM 設定を変更できます。これらの変数は、デフォルトメモリーサイズが自動的に算出される場合にのみ使用されることに注意してください (つまり、有効なコンテナーのメモリー制限が定義されているとき)。

  • JAVA_MAX_MEM_RATIO
  • JAVA_INITIAL_MEM_RATIO
  • JAVA_MAX_INITIAL_MEM

以下の 2 つの環境変数の値を 0 に設定すると、メモリーの自動計算を無効にできます。

  • JAVA_INITIAL_MEM_RATIO
  • JAVA_MAX_MEM_RATIO

3.2.1.2. JVM ガベージコレクションの設定

OpenShift の EAP イメージには、コレクションとガべージコレクションロギングの両方の設定が含まれます。

ガベージコレクションの設定

-XX:+UseParallelOldGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError

Java 8 のガベージコレクションのロギング設定 (非モジュール JVM)

-verbose:gc -Xloggc:/opt/eap/standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading

Java 11 (modular JVM) のガベージコレクションのロギング設定

-Xlog:gc*:file=/opt/eap/standalone/log/gc.log:time,uptimemillis:filecount=5,filesize=3M

3.2.1.3. デフォルト設定のリソース制限

これが設定されている場合には、追加のデフォルト設定がイメージに含まれます。

-XX:ParallelGCThreads={core-limit} -Djava.util.concurrent.ForkJoinPool.common.parallelism={core-limit} -XX:CICompilerCount=2

{core-limit} の値は、JAVA_CORE_LIMIT 環境変数を使用するか、コンテナーによる CPU コア制限で定義されます。

CICompilerCount の値は常に 2 に固定されます。

3.2.1.4. JVM 環境変数

これらの環境変数を使用して、EAP for OpenShift イメージで JVM を設定します。

表3.1 JVM 環境変数

変数名デフォルト値JVM の設定説明

JAVA_OPTS

-verbose:class

デフォルトなし

multiple

java コマンドに渡す JVM オプション。

JAVA_OPTS_APPEND を使用して追加の JVM 設定を設定します。JAVA_OPTS を使用すると、一部の未設定のデフォルト値がサーバー JVM 設定に追加されません。これらの設定は、明示的に追加する必要があります。

JAVA_OPTS を使用すると、コンテナースクリプトによりデフォルトで追加された特定の設定が無効になります。無効な設定には以下が含まれます。

  • -XX:MetaspaceSize=96M
  • -Djava.net.preferIPv4Stack=true
  • -Djboss.modules.system.pkgs=org.jboss.logmanager,jdk.nashorn..api,com.sun.crypto.provider
  • -Djava.awt.headless=true

さらに、自動メモリー計算が有効になっていない場合、初期 Java メモリー (-Xms) および最大 Java メモリー (-Xmx) は定義されません。

JAVA_OPTS を使用して追加設定を行う場合は、これらのデフォルトを追加します。

JAVA_OPTS_APPEND

-Dsome.property=value

デフォルトなし

Multiple

JAVA_OPTS で生成されたオプションに追加するユーザー指定の Java オプション。

JAVA_MAX_MEM_RATIO

50

50

-Xmx

-Xmx オプションが JAVA_OPTS に指定されていない場合には、この変数を使用します。この変数の値は、コンテナーの制限に基づいてデフォルトの最大ヒープメモリーサイズを算出するために使用されます。この変数がメモリー制限なしで、コンテナー内で使用される場合、この変数の効果はありません。この変数がメモリー制約のあるコンテナーで使用されると、-Xmx の値はコンテナーで使用できるメモリーの指定の比率に設定されます。デフォルト値の 50 は、利用可能なメモリーの 50% が上限として使用されることを意味します。最大メモリーの計算を省略するには、この変数の値を 0 に設定します。JAVA_OPTS には、-Xmx オプションは追加されません。

JAVA_INITIAL_MEM_RATIO

25

25

-Xms

この変数は、-Xms オプションが JAVA_OPTS で指定されていない場合に使用します。この変数の値は、最大ヒープメモリーサイズを基にしたデフォルトの初期ヒープメモリーサイズの算出に使用されます。この変数がメモリー制限なしで、コンテナー内で使用される場合、この変数の効果はありません。この変数がメモリー制約のあるコンテナーで使用されている場合、-Xms の値が Xmx メモリーの指定比に設定されます。デフォルト値の 25 は、初期ヒープサイズとして最大メモリーの 25% が使用されることを意味します。初期メモリーの計算を省略するには、この変数の値を 0 に設定します。JAVA_OPTS には -Xms オプションは追加されません。

JAVA_MAX_INITIAL_MEM

4096

4096

-Xms

この変数は、-Xms オプションが JAVA_OPTS で指定されていない場合に使用します。この変数の値は、初期メモリーヒープの最大サイズの算出に使用されます。この値はメガバイト (MB) で示されます。この変数がメモリー制限なしで、コンテナー内で使用される場合、この変数の効果はありません。この変数がメモリー制約のあるコンテナーで使用されると、-Xms の値は、その変数で指定された値に設定されます。デフォルト値 4096 では、初期ヒープの最大値が 4096 MB を超えることはありません。

JAVA_DIAGNOSTICS

true

false (無効)

この設定は、コンテナーが使用する JDK によって異なります。

  • OpenJDK8: -XX:NativeMemoryTracking=summary -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UnlockDiagnosticVMOptions
  • OpenJDK11: -Xlog:gc:utctime -XX:NativeMemoryTracking=summary

この変数の値を true に設定すると、イベントの発生時に、標準出力に診断情報が含まれます。JAVA_DIAGNOSTICS が既に true として定義されている環境で、この値が true に定義されていると、診断が依然として含まれます。

DEBUG

true

false

-agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

リモートデバッグを有効にします。

DEBUG_PORT

8787

8787

-agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

デバッグに使用するポートを指定します。

JAVA_CORE_LIMIT

 

未定義

-XX:parallelGCThreads -Djava.util.concurrent.ForkJoinPool.common.parallelism -XX:CICompilerCount

コア数におけるユーザー定義の制限。コンテナーが制限の制約を報告する場合、JVM 設定の値はコンテナーのコア制限に制限されます。-XXCICompilerCount の値は、常に 2 です。デフォルトでは、この変数は未定義です。この場合、制限がコンテナーに定義されていなければ、JVM 設定は設定されません。

GC_MIN_HEAP_FREE_RATIO

20

10

-XX:MinHeapFreeRatio

拡大を回避するためのガベージコレクション後のヒープ解放の最小パーセンテージ。

GC_MAX_HEAP_FREE_RATIO

40

20

-XX:MaxHeapFreeRatio

縮小を回避するためのガベージコレクション後のヒープ解放の最大パーセンテージ。

GC_TIME_RATIO

4

4

-XX:GCTimeRatio

ガべージコレクションで費やした時間と、それ以外で費やされる時間の比率を指定します (アプリケーション実行にかかった時間など)。

GC_ADAPTIVE_SIZE_POLICY_WEIGHT

90

90

-XX:AdaptiveSizePolicyWeight

現在のガベージコレクション時間と以前のガベージコレクション時間に指定される重み。

GC_METASPACE_SIZE

20

96

-XX:MetaspaceSize

初期メタスペースのサイズ。

GC_MAX_METASPACE_SIZE

100

256

-XX:MaxMetaspaceSize

最大メタスペースサイズ。

GC_CONTAINER_OPTIONS

-XX:+UserG1GC

-XX:-UseParallelOldGC

-XX:-UseParallelOldGC

使用する Java ガベージコレクションを指定します。この変数の値は、必要なガベージコレクションを指定するための JRE コマンドラインオプションである必要があります。JRE コマンドはデフォルトをオーバーライドします。

以下の環境変数が非推奨になりました。

  • JAVA_OPTIONS: JAVA_OPTS を使用します。
  • INITIAL_HEAP_PERCENT: JAVA_INITIAL_MEM_RATIO を使用します。
  • CONTAINER_HEAP_PERCENT: JAVA_MAX_MEM_RATIO を使用します。