kafka内存溢出 java.lang.OutOfMemoryError: Direct buffer memory

宇宙人 发表于: 2021-03-15   最后更新时间: 2021-03-15 15:46:57   189 游览
0

kafka版本号:2.3.0;集群:1台,broker:2个;Mem: 16G

错误信息:

[2021-03-14 04:57:49,831] ERROR Processor got uncaught exception. (kafka.network.Processor)
java.lang.OutOfMemoryError: Direct buffer memory
    at java.nio.Bits.reserveMemory(Bits.java:693)
    at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
    at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
    at sun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:174)
    at sun.nio.ch.IOUtil.read(IOUtil.java:195)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
    at org.apache.kafka.common.network.PlaintextTransportLayer.read(PlaintextTransportLayer.java:103)
    at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:117)
    at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:424)
    at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:385)
    at org.apache.kafka.common.network.Selector.attemptRead(Selector.java:651)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:572)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:483)
    at kafka.network.Processor.poll(SocketServer.scala:863)
    at kafka.network.Processor.run(SocketServer.scala:762)
    at java.lang.Thread.run(Thread.java:745)

尝试过在kafka-run-class.sh 脚本内添加 -XX:MaxDirectMemorySize=512M,并逐步增加数值一直到4096M,同时两个broker配置 KAFKA_HEAP_OPTS="-Xmx6G -Xms6G"由1G逐步增加到6G,依然出现此报错。

请博主帮助分析一下!



发表于 1月前

  • 你先

    ps -ef|grep kafka
    

    看看内存修改是否生效了。

    • 1、首先确保你这台物理机有足够的内存,-XX:MaxDirectMemorySize= 4096M这个的,jvm分走后该机器必须还要有4g内存让它分配(堆外内存)。
      2、你的消息量已经超过了系统瓶颈,kafka在集群互相同步交互消息的时候,受物理的网络和存储的影响,只能通过增加节点来分摊压力。

      • 找不到想要的答案?

        我要提问
        相关