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" # ...
# ...
jvmOptions:
"-Xmx": "2g"
"-Xms": "2g"
# ...
为 initial (-Xms)和最大(-Xmx)堆大小设置相同的值,可以避免 JVM 启动后必须分配内存,但成本可能比实际需要的堆更大。
执行大量磁盘 I/O (如 Kafka 代理容器)的容器需要可用内存用作操作系统页面缓存。对于这样的容器,请求的内存应显著高于 JVM 使用的内存。
-XX 选项
-XX 选项用于配置 Apache Kafka 的 KAFKA_JVM_PERFORMANCE_OPTS 选项。
示例 -XX 配置
由 -XX 配置生成的 JVM 选项
-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -XX:-UseParNewGC
-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:
javaSystemProperties:
- name: javax.net.debug
value: ssl
有关 jvmOptions 的更多信息,请参阅 JvmOptions 模式参考。