搜索

2.9. jvmOptions

download PDF

以下 Apache Kafka 组件的流在 Java 虚拟机(JVM)中运行:

  • Apache Kafka
  • Apache ZooKeeper
  • Apache Kafka Connect
  • Apache Kafka MirrorMaker
  • Apache 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 二进制文件所接受的单元。因此,1g1G 表示 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 根据内存资源配置百分比设置默认的最大值和最小堆值。

下表显示了默认的堆值。

表 2.2. 组件的默认堆设置
组件分配给堆的可用内存百分比最大限制

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 模式参考

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.