搜索

3.2. 使用环境变量为 OpenShift 配置 JBoss EAP

download PDF

使用环境变量是为 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。

表 3.1. JVM 环境变量
变量名称示例默认值JVM 设置描述

JAVA_OPTS

-verbose:class

没有默认

多个

要传递给 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

没有默认

多个

用户指定的 Java 选项,可附加到 JAVA_OPTS 中生成的选项.

JAVA_MAX_MEM_RATIO

50

50

-Xmx

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

JAVA_INITIAL_MEM_RATIO

25

25

-xms

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

JAVA_MAX_INITIAL_MEM

4096

4096

-xms

如果未在 JAVA_OPTS 中指定 -Xms 选项,则使用此变量。此变量的值用于计算初始内存堆的最大大小。该值以兆字节(MB)为单位表示。如果在没有内存约束的容器中使用此变量,则 变量无效。如果此变量在具有内存约束的容器中使用,则 -Xms 的值将设置为 变量中指定的值。默认值为 4096MB,指定最大初始堆永远不会大于 4096MB。

JAVA_DIAGNOSTICS

true

false (disabled)

设置取决于容器使用的 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
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.