Kafka Java进程消耗过多内存的方式

4

我有一个kafka 0.11.xx的服务器,有三个节点。

托管该服务器的机器是一台带有4GB RAM的Linux Ubuntu机器。

我可以看到Java进程正在使用大约90%的RAM。

我已经将堆值设置为5GB。

占用内存的进程是jre/bin/java -Xmx5G -Xms5G

那么,对于kafka来说,使用4-5 GB的内存是正常的情况吗?还是说这不正常?

如果这不是通常的情况,你能否提供解决此问题的方法,或者增加RAM是唯一的答案。


2
这取决于您使用Kafka做什么。 - Gatusko
我们有几个主题,我们生产和消费消息。不过这种活动并不是很频繁。 - KKN
1
“-Xms5G” 字面意思是 “启动时从操作系统中获取5GB的RAM”,它不受负荷影响。 - user158037
2个回答

4

Kafka旨在充分利用可用内存以确保其高性能。

Linux也会获取所需的内存,这并不一定是坏事。

只有当性能分析确定机器受到可用RAM的瓶颈限制时,才需要担心内存使用情况。


不要担心。 - KeatsKelleher

1
一些事情:
- 不知何故,您将JVM堆参数设置为5GB。但是您的服务器只有4GB的物理内存?您需要留出内存给操作系统、其他辅助应用程序/实用程序以及Kafka,否则您将遇到问题。 - Kafka本身依赖于堆外存储器(即JVM之外的存储器)来为消费者提供服务,以便它不必一直从磁盘中读取所有内容。但是,您需要有可用的内存。
由于您表示集群上没有太多活动,因此我首先会从仅将Kafka服务的JVM参数(我假设这就是您发布的内容)设置为2GB开始,如下所示:-Xmx2G -Xms2G。然后观察它对您的应用程序/服务产生的影响。 Kafka将拥有大约2GB+的RAM用于堆外处理。

顺便提一句,增加堆内存会减少可用的本机/堆外内存。因此,缩小堆大小可以改善内存使用和性能。 - Peter Lawrey
那么,对于一个生产就绪的3节点Kafka,它需要在规律的时间间隔内产生和消费相对较重的消息,使用4GB RAM并进行适当的堆管理(2GB堆)是否足够,或者我们应该考虑将RAM增加到8GB,并配备大约4GB的堆内存? - KKN
你最好的选择是进行测试。尝试使用4GB RAM和2GB JVM堆来测试性能。这可能已经足够处理你的数据量了。如果有什么问题,你可能会在CPU或带宽瓶颈上遇到问题,而不是内存不足。 - mjuarez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接