Memory leaks 卡夫卡内存泄漏

Memory leaks 卡夫卡内存泄漏,memory-leaks,apache-kafka,kafka-consumer-api,metrics,Memory Leaks,Apache Kafka,Kafka Consumer Api,Metrics,我们使用Kafka构建了一个数据摄取管道。我们有一个消费者,他不断地从卡夫卡主题中读取内容并写入数据库。这些消费者吊舱遇到OOM事件问题。我们在K8上运行卡夫卡 我们现在看到,由于OOM错误,消费者吊舱每4-5天重新启动一次。我们正在使用卡夫卡java库的卡夫卡2.2版本 编译组:“org.apache.kafka”,名称:“kafka_2.12”,版本:“2.2.0” 编译组:“org.apache.kafka”,名称:“kafka客户端”,版本:“2.2.0” 以下是pod内jvm的统计信息

我们使用Kafka构建了一个数据摄取管道。我们有一个消费者,他不断地从卡夫卡主题中读取内容并写入数据库。这些消费者吊舱遇到OOM事件问题。我们在K8上运行卡夫卡

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

编译组:“org.apache.kafka”,名称:“kafka_2.12”,版本:“2.2.0” 编译组:“org.apache.kafka”,名称:“kafka客户端”,版本:“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年代打开的,从未关闭过。我把它们关好,然后试着看看那堆东西。我仍然看到问题依然存在

我能知道卡夫卡的什么操作产生了上述类吗?是consumer.poll()还是后台运行状况检查或其他内容

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

以下是来自Eclipse MAT的一份泄漏可疑报告:

由“”加载的“com.sun.jmx.mbeanserver.JmxMBeanServer”的一个实例占用61571856(36.76%)字节。该实例由org.apache.commons.dbcp2.PoolableConnection@0xf0647668引用,由“sun.misc.Launcher$AppClassLoader@0xf09a3bd8”加载。内存累积在“”加载的“java.util.HashMap$Node[]”的一个实例中。

sun.nio.ch.EPollArrayWrapper```