所以我有一个Java服务,它在一个while循环中使用Kafka来获取kafka-clients
主题。在执行大约3-5分钟后,我在运行单个使用者时遇到了OOM (内存不足)问题。
我捕获了一个堆转储,它指向org.apache.kafka.common.network.Selector
占用已分配的内存。最终我得到了GC overhead limit exceeded
错误。
我已经关注了以下两个资源,但没有运气,因为我的问题似乎与SSL无关(我使用的是PlainText)。
Debugging a memory leak in Apache Kafka®
以下是我的一些kafka属性:
connections.max.idle.ms = 540000
default.api.timeout.ms = 60000
enable.auto.commit = true
exclude.internal.topics = true
fetch.max.bytes = 52428800
fetch.max.wait.ms = 500
fetch.min.bytes = 1
max.partition.fetch.bytes = 20000000
max.poll.interval.ms = 30000
max.poll.records = 1000
发布于 2021-11-05 17:21:56
可能已经弄明白了:
当我的客户连接到代理时,属性fetch.max.bytes
默认为52428800
,即每批52MB。
我的客户每隔100ms轮询一次。我假设这个频率,再加上每个批处理的大小,会让垃圾收集器应接不暇。我将此参数修改为一个更合理的数字,现在一切似乎都很正常。
https://stackoverflow.com/questions/69855016
复制相似问题