【问题标题】:kafka java process consuming way too much memorykafka java进程消耗太多内存
【发布时间】:2018-10-03 15:25:03
【问题描述】:

我有一个带有三个节点的 kafka 0.11.xx 服务器。 托管服务器的机器是具有 4GB RAM 的 linux Ubuntu 机器。 我可以看到 java 进程正在使用我大约 90% 的 RAM。 我已将堆值设置为 5GB。

消耗内存的进程是jre/bin/java -Xmx5G -Xms5G

那么,kafka 预计以 4-5 GB 的内存运行是正常的情况,还是不正常的情况。

如果不是通常情况,您能否建议解决此问题,或者增加 RAM 将是唯一的答案。

【问题讨论】:

  • 这取决于你用 Kafka 做什么
  • 我们有几个主题,我们生产和消费消息。虽然活动不是那么频繁
  • -Xms5G 字面意思是“启动时从操作系统获取 5GB 内存”,它不依赖于负载

标签: java apache-kafka jvm


【解决方案1】:

Kafka 是 designed to use the memory available to it,作为确保其高性能的一部分。

Linux 也将grab the memory it needs 这不一定是坏事。

如果您的性能分析确定机器在可用 RAM 上出现瓶颈,我只会担心内存使用情况。

【讨论】:

  • “别担心”-OP
【解决方案2】:

一些事情:

  • 不知何故,您将 JVM 堆参数设置为 5GB。但是您的服务器只有 4GB 的物理 RAM?您需要为操作系统、其他辅助应用程序/实用程序以及 Kafka 留出内存,否则您会遇到问题。
  • Kafka 本身依赖堆外内存(即 JVM 之外的内存)从那里为消费者提供服务,因此它不必一直从磁盘读取所有内容。但同样,您需要有可用的内存。

由于您指出集群上没有很多活动,我首先将 Kafka 服务(我假设您发布的内容)的 JVM 参数设置为仅 2GB,因此:-Xmx2G -Xms2G。然后看看它如何影响您的应用程序/服务。然后,Kafka 将有大约 2GB 以上的 RAM 用于堆外处理。

【讨论】:

  • BTW 增加堆内存会减少可用的本机/堆外内存。因此减小堆大小可以提高内存使用率和性能。
  • 因此,对于生产就绪的 3 节点 kafka 而言,定期产生和消耗大量消息,4 GB 的 RAM 和适当的堆管理(2GB 堆)是否足够,或者我们是否应该考虑增加 RAM到 8GB,大约 4GB 的堆内存
  • 你最好的选择是测试它。试试 4GB RAM 和 2GB JVM 堆的性能。这可能足以满足您的音量。如果有的话,您可能会在内存不足之前遇到 CPU 或带宽瓶颈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2019-01-16
相关资源
最近更新 更多