一个rocketmq集群(2m2s)到其中一个master节点偶发出现报错,请问是什么原因?[阿里云消息队列MQ]

一个rocketmq集群(2m2s)从4.7.1升级到4.9.7后启动正常,到其中一个master节点偶发出现OutOfDirectMemoryError,堆外内存限制已经设到8g还有报错,最后设到10g重启才恢复,集群负载不高总共只有500tps,配置8C16G,而且只有这1个节点有这种情况,对比了两个master节点的broker.propertis和jvm参数没有发现差异,请问是什么原因?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 如果堆内存都正常 可以看下源码 或者最简单的升级到5.x版本的rocketmq,如果解决了 可能4.x的某个版本存在内存泄漏的问题。 此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”。

  2. OutOfDirectMemoryError错误表示堆外内存不足。在RocketMQ中,堆外内存主要用于存储消息的序列化数据和发送/接收网络IO缓冲区。

    根据你提供的信息,有以下一些可能导致该问题的原因:

    1. 系统环境配置:检查操作系统的max direct memory size参数是否已正确设置。这个参数表示堆外内存最大可用大小。确保参数足够大以满足RocketMQ的需求。

    2. JVM参数配置:确保所有的RocketMQ节点使用相同的JVM参数配置。特别关注堆外内存的相关参数,如-XX:MaxDirectMemorySize。确认这些参数在所有节点上都被正确设置,并且没有差异。

    3. 版本升级问题:从4.7.1升级到4.9.7之后,某些配置项可能发生了变化,包括默认值或者与堆外内存相关的配置。请确保所有节点都已按照新版本文档中的建议进行配置。

    4. 消息发送速率过快:尽管你提到集群负载不高(总共只有500tps),但仍然需要考虑具体的消息发送和消费情况。如果存在突发的消息发送速率或者某些消费者处理速度较慢,可能会导致堆外内存不足。

    5. 硬件资源限制:检查服务器硬件资源是否足够支持,包括内存、磁盘和网络带宽等。