3.2. 使用环境变量为 OpenShift 配置 JBoss EAP
使用环境变量是为 OpenShift 镜像配置 JBoss EAP 的推荐方法。如需有关为应用容器和构建容器指定环境变量的说明,请参阅 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):计算的最大堆大小的 2 5%(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
3.2.1.2. JVM Garbage Collection Settings
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 的垃圾收集日志记录设置(模态 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 中为 OpenShift 镜像配置 JVM。
变量名称 | 示例 | 默认值 | JVM 设置 | 描述 |
---|---|---|---|---|
JAVA_OPTS | -verbose:class | 没有默认 | 多个 |
要传递给
使用
使用
此外,如果没有启用自动内存计算,则不定义初始 Java 内存(-Xms)和最大 Java 内存(-Xmx)。
如果您使用 |
JAVA_OPTS_APPEND | -Dsome.property=value | 没有默认 | 多个 |
用户指定的 Java 选项,可附加到 |
JAVA_MAX_MEM_RATIO | 50 | 50 | -Xmx |
如果未在 |
JAVA_INITIAL_MEM_RATIO | 25 | 25 | -xms |
如果未在 |
JAVA_MAX_INITIAL_MEM | 4096 | 4096 | -xms |
如果未在 |
JAVA_DIAGNOSTICS | true | false (disabled) | 设置取决于容器使用的 JDK。
|
将此变量的值设为 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
。