2.9. jvmOptions
以下 AMQ Streams 组件在 Java 虚拟机(JVM)中运行:
- Apache Kafka
- Apache ZooKeeper
- Apache Kafka Connect
- Apache Kafka MirrorMaker
- AMQ Streams Kafka Bridge
要在不同平台和构架中优化其性能,您可以在以下资源中配置 jvmOptions
属性:
-
Kafka.spec.kafka
-
Kafka.spec.zookeeper
-
Kafka.spec.entityOperator.userOperator
-
Kafka.spec.entityOperator.topicOperator
-
Kafka.spec.cruiseControl
-
KafkaNodePool.spec
-
KafkaConnect.spec
-
KafkaMirrorMaker.spec
-
KafkaMirrorMaker2.spec
-
KafkaBridge.spec
您可以在配置中指定以下选项:
-Xms
- JVM 启动时的最小初始分配堆大小
-Xmx
- 最大堆大小
-XX
- JVM 的高级运行时选项
javaSystemProperties
- 其他系统属性
gcLoggingEnabled
- 启用垃圾收集器日志记录
JVM 设置接受的单元(如 -Xmx
和 -Xms
)是对应镜像中 JDK java
二进制文件所接受的单元。因此,1g
或 1G
表示 1,073,741,824 字节,Gi
不是有效的单位后缀。这与用于 内存请求和限值 的单元不同,其遵循 OpenShift 约定,其中 1G
表示 1,000,000,000 字节,1Gi
表示 1,073,741,824 字节。
-Xms
和 -Xmx
选项
除了为容器设置内存请求和限制值外,您还可以使用 -Xms
和 -Xmx
JVM 选项为您的 JVM 设置特定的堆大小。使用 -Xms
选项设置初始堆大小和 -Xmx
选项,以设置最大堆大小。
指定堆大小,以更好地控制分配给 JVM 的内存。堆大小应充分利用 容器的内存限值(和请求), 而不超过它。堆大小以及任何其他内存要求都需要在指定的内存限值中容纳。如果您没有在配置中指定堆大小,但配置内存资源限制(和请求),Cluster Operator 会自动实施默认的堆大小。Cluster Operator 根据内存资源配置百分比设置默认的最大值和最小堆值。
下表显示了默认的堆值。
组件 | 分配给堆的可用内存百分比 | 最大限制 |
---|---|---|
Kafka | 50% | 5 GB |
ZooKeeper | 75% | 2 GB |
Kafka Connect | 75% | None |
MirrorMaker 2 | 75% | None |
MirrorMaker | 75% | None |
Sything Control | 75% | None |
Kafka Bridge | 50% | 31 Gi |
如果没有指定内存限制(和请求),则 JVM 的最小堆大小设置为 128M
。JVM 的最大堆大小没有定义,以允许内存根据需要增加。这是测试和开发中的单一节点环境的理想选择。
设置适当的内存请求可能会阻止以下内容:
- 如果节点上运行其他容器集的内存压力,OpenShift 会终止容器。
-
OpenShift 将容器调度到内存不足的节点。如果将
-Xms
设置为-Xmx
,则容器将立即崩溃;如果没有,则容器将稍后崩溃。
在本例中,JVM 将 2 GiB (=2,147,483,648 字节)用于其堆。JVM 内存用量总量可能比最大堆大小多得多。
示例 -Xmx
和 -Xms
配置
# ... jvmOptions: "-Xmx": "2g" "-Xms": "2g" # ...
为 initial (-Xms
)和最大(-Xmx
)堆大小设置相同的值,可以避免 JVM 启动后必须分配内存,但成本可能比实际需要的堆更大。
执行大量磁盘 I/O (如 Kafka 代理容器)的容器需要可用内存用作操作系统页面缓存。对于这样的容器,请求的内存应显著高于 JVM 使用的内存。
-XX 选项
-XX
选项用于配置 Apache Kafka 的 KAFKA_JVM_PERFORMANCE_OPTS
选项。
示例 -XX
配置
jvmOptions: "-XX": "UseG1GC": true "MaxGCPauseMillis": 20 "InitiatingHeapOccupancyPercent": 35 "ExplicitGCInvokesConcurrent": true
由 -XX
配置生成的 JVM 选项
-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:-UseParNewGC
如果没有指定 -XX
选项,则使用 KAFKA_JVM_PERFORMANCE_OPTS
的默认 Apache Kafka 配置。
javaSystemProperties
javaSystemProperties
用于配置额外的 Java 系统属性,如调试实用程序。
javaSystemProperties
配置示例
jvmOptions: javaSystemProperties: - name: javax.net.debug value: ssl
有关 jvmOptions
的更多信息,请参阅 JvmOptions
模式参考。