卡夫卡中的内存泄漏

时间:2019-10-23 20:10:19

标签: memory-leaks apache-kafka kafka-consumer-api metrics

我们已经使用Kafka建立了数据提取管道。我们有一个消费者,它从kafka主题中读取并连续写入数据库。这些消费者吊舱遇到OOM事件的问题。我们在k8s上运行kafka。

我们现在看到,由于OOM错误,消费者吊舱每4-5天重新启动一次。我们正在使用kafka java库的Kafka 2.2版本。

编译组:“ org.apache.kafka”,名称:“ kafka_2.12”,版本:“ 2.2.0”         编译组:“ org.apache.kafka”,名称:“ kafka-clients”,版本:“ 2.2.0”

以下是pod内jvm的统计信息:

  15:          6075         145800  org.apache.kafka.common.requests.ApiVersionsResponse$ApiVersion
  16:          4030         128960  org.apache.kafka.common.MetricName
  17:          4030         128960  org.apache.kafka.common.metrics.KafkaMetric
  22:          1672          80256  org.apache.kafka.common.metrics.stats.SampledStat$Sample
  24:          1174          75136  org.apache.kafka.common.metrics.Sensor
  27:          1261          40352  org.apache.kafka.common.metrics.stats.Meter
  29:          1291          30984  org.apache.kafka.common.metrics.stats.Total
  30:          1261          30264  org.apache.kafka.common.metrics.stats.Rate
  32:           849          27168  org.apache.kafka.common.MetricNameTemplate
  35:           975          23400  org.apache.kafka.common.protocol.types.BoundField



/ # jcmd {app}.jar GC.class_histogram | head

 num     #instances         #bytes  class name
----------------------------------------------
   1:          1828        5264368  [B
   2:         33683        2949528  [C
   3:          7422         832008  java.lang.Class
   4:         33674         808176  java.lang.String
   5:         10990         764272  [Ljava.lang.Object;
   6:         23875         764000  java.util.HashMap$Node

当我开始分析堆转储时,我认为问题出在KafkaAdminClient线程上,这些线程在jvm上以100的速度打开,但从未关闭过。我正确地关闭了它们,然后尝试查看堆。我仍然看到问题仍然存在。

我可以知道kafka中的哪种操作会产生上述类吗?是Consumer.poll()还是后台运行状况检查或其他内容。

任何朝着正确方向指向的指针都会有很大帮助。我已经坚持了一个多星期。我尝试了许多不同的堆转储分析器。它们都指向JMX和NIO类。

这是Eclipse MAT的一份泄漏可疑报告:

One instance of "com.sun.jmx.mbeanserver.JmxMBeanServer" loaded by "<system class loader>" occupies 61,571,856 (36.76%) bytes. The instance is referenced by org.apache.commons.dbcp2.PoolableConnection @ 0xf0647668 , loaded by "sun.misc.Launcher$AppClassLoader @ 0xf09a3bd8". The memory is accumulated in one instance of "java.util.HashMap$Node[]" loaded by "<system class loader>".

sun.nio.ch.EPollArrayWrapper```

0 个答案:

没有答案