开发者社区 > 云原生 > 云消息队列 > 正文

一个rocketmq集群(2m2s)到其中一个master节点偶发出现报错,请问是什么原因?

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

展开
收起
2401。 2023-07-31 13:17:42 95 0
2 条回答
写回答
取消 提交回答
  • 如果堆内存都正常 可以看下源码 或者最简单的升级到5.x版本的rocketmq,如果解决了 可能4.x的某个版本存在内存泄漏的问题。 此回答整理自钉群“群2-Apache RocketMQ 中国开发者钉钉群”。

    2023-08-01 13:41:18
    赞同 展开评论 打赏
  • 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. 硬件资源限制:检查服务器硬件资源是否足够支持,包括内存、磁盘和网络带宽等。

    2023-07-31 14:17:10
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载