4.2. 配置 JBoss EAP for OpenShift 使用环境变量

使用环境变量是为 OpenShift 镜像配置 JBoss EAP 的建议方法。如需有关为应用程序容器和构建容器 指定环境变量 的说明,请参阅 OpenShift 文档。

例如,您可以在创建 OpenShift 应用程序时使用环境变量设置 JBoss EAP 实例的管理用户名和密码:

oc new-app --template=eap74-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.4.x \
 -p CONTEXT_DIR=kitchensink \
 -e ADMIN_USERNAME=myspecialuser \
 -e ADMIN_PASSWORD=myspecialp@ssw0rd

参考资料信息 列出了用于 OpenShift 镜像的 JBoss EAP 的可用 环境变量

4.2.1. JVM 内存配置

OpenShift EAP 镜像具有自动基于当前环境计算默认 JVM 内存设置的机制,但您也可以使用环境变量配置 JVM 内存设置。

4.2.1.1. JVM 默认内存设置

如果为当前容器定义了内存限制,并且限制小于可用内存,则会自动计算默认 JVM 内存设置。否则,默认的 JVM 内存设置是在用作镜像基础服务器的 EAP 版本的 standalone.conf 文件中定义的默认设置。

容器的内存限值从 /sys/fs/cgroup/memory/memory.limit_in_bytes 文件中检索。可用内存总量使用 / proc/meminfo 命令来检索。

自动计算内存设置时,使用以下公式:

  • 最大堆大小(-Xmx):用户内存的 fifty percent(50%)
  • 初始堆大小(-Xms):计算最大堆大小的二十五百(25%)。

例如,定义的内存限值为 1 GB,此限制低于 /proc/meminfo 报告的总可用内存,然后内存设置将为: -Xms128m -Xmx512

您可以使用以下环境变量来修改自动计算的 JVM 设置:请注意,仅当定义了有效容器内存限制时,这些变量才会自动计算默认内存大小(换句话说)。

  • JAVA_MAX_MEM_RATIO
  • JAVA_INITIAL_MEM_RATIO
  • JAVA_MAX_INITIAL_MEM

您可以通过将以下两个环境变量的值设置为 0 来禁用自动内存计算。

  • JAVA_INITIAL_MEM_RATIO
  • JAVA_MAX_MEM_RATIO

4.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:GCFileSize=3M -XX:-TraceClassUnloading

Java 11 的垃圾回收日志记录设置(模块化 JVM)

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

4.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

4.2.1.4. JVM 环境变量

使用这些环境变量在 EAP 中为 OpenShift 镜像配置 JVM。

表 4.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=jdk.nashorn.api,com.sun.crypto.provider
  • -Djava.awt.headless=true

另外,如果没有启用自动内存计算,则不会定义 inital Java 内存(-Xms)和最大 Java 内存(-Xmx)。

如果使用 JAVA_OPTS 配置其他设置,请添加这些默认值。

JAVA_OPTS_APPEND

-Dsome.property=value

没有默认值

Multiple

用户指定的 Java 选项以附加到 JAVA_OPTS 中的生成选项。

JAVA_MAX_MEM_RATIO

50

50

-Xmx

JAVA_OPTS 中没有指定 -Xmx 选项时,请使用此变量。此变量的值用于根据容器的限制计算默认最大堆大小。如果在没有内存限制的容器中使用此变量,则 变量不会起作用。如果在具有内存约束的容器中使用此变量,则将 -Xmx 的值设置为容器可用内存的指定比例。默认值 50 代表 50% 用作可用内存的上限。要跳过最大内存计算,请将此变量的值设置为 0。无 -Xmx 选项将添加到 JAVA_OPTS

JAVA_INITIAL_MEM_RATIO

25

25

-Xms

JAVA_OPTS 中没有指定 -Xms 选项时,使用此变量。此变量的值用于根据最大堆大小计算默认初始堆大小。如果在没有内存限制的容器中使用此变量,则 变量不会起作用。如果在具有内存约束的容器中使用了此变量, -Xms 的值会被设置为 -Xmx 内存的指定比例。默认值为 25,表示最大内存的 25% 用作初始堆大小。要跳过初始内存的计算,请将此变量的值设置为 0。没有 -Xms 选项会被添加到 JAVA_OPTS

JAVA_MAX_INITIAL_MEM

4096

4096

-Xms

JAVA_OPTS 中没有指定 -Xms 选项时,使用此变量。此变量的值用于计算初始内存堆的最大大小。该值以 MB(MB)表示。如果在没有内存限制的容器中使用此变量,则 变量不会起作用。如果在有内存约束的容器中使用了此变量,则 -Xms 的值会被设置为变量中指定的值。默认值为 4096,指定最大堆大小将永远不会大于 4096MB。

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。默认情况下,此变量为 undefined。在这种情况下,如果没有在容器上定义限制,则不会设置 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:+UseG1GC

-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