RabbitMQ集群高内存占用问题排查与解决求助
问题背景
- 生产环境使用3节点RabbitMQ 3.10.25集群
- 集群包含队列:
- 1个classic队列
- 1个处理NServiceBus命令的quorum队列(依赖NServiceBus.RabbitMQ 8.0.2包)
- 1个名为
error的quorum队列 - 28个NServiceBus quorum队列(命名格式为
nsb.v2.delay-level-xx)
- 流量现状:仅classic队列每秒处理2条消息,其余quorum队列无业务流量
异常表现
- 运行数小时后,承载classic队列的节点内存稳定,另外2个节点内存占用已达内存水位线
- 节点存在大量持续增长的预分配未使用内存(preallocated unused memory),
other_ets表占用达1.2GB且持续上升 - 写入/同步IO偏高,即使无生产者/消费者连接,内存仍持续增长
排查关键发现
- UPDATE1:无生产者/消费者连接时,写入/同步IO仍偏高,内存持续增长
- UPDATE2:队列
nsb.v2.verify-stream-flag-enabled显示Cluster is in minority状态 - UPDATE3:执行
rabbitmqctl生成的内存报告显示:allocated_unused占比65.04%(2.4707GB)、other_ets占比31.74%(1.2057GB),两者占比过高 - UPDATE4:安装Top Processes插件后发现,
rabbit_stream_coordinator对应的ra_coordination_log_ets表内存反复增长且无法释放 - UPDATE5:确认问题根源为NServiceBus创建的stream队列
nsb_v2_verify-stream-flag-enabled,日志显示osiris副本连接失败;删除该队列后内存占用恢复稳定,但重启应用后该队列会被自动重建,且仍显示Cluster in minority状态
求助问题
Cluster is in minority状态的含义是什么?是否会引发上述内存问题?- 解决该内存占用问题的最佳方案是什么?
- RabbitMQ或NServiceBus是否有相关配置可降低内存使用?
内容的提问来源于stack exchange,提问作者Odrai
相关产品推荐
相关产品推荐

