我目前在生产环境中使用 RabbitMQ (3.10.25),具有 3 个节点并包含多个队列:
经典队列每秒处理 2 条消息。 仲裁队列不执行任何操作。
几个小时后,一个节点仍然稳定(由经典队列使用),其他 2 个节点的内存使用率很高。已达到水印内存限制。另外,还有大量的预先分配的未使用内存(看起来不正常并且还在增加)。其他表也是1.2GB..(不断增加)
解决这个问题的最佳方法是什么? RabbitMq 或 NserviceBus 是否提供特定设置?减少内存使用?
在 RabbitMQ 上可以找到一些信息,但尚不清楚需要调整哪些设置作为起点。
更新 1:写入/同步 IO 也很高。 (以上截图是在一些生产者/消费者连接时创建的。即使没有生产者/消费者,内存消耗仍在继续上升。IO截图是0个生产者/消费者的情况)
更新2: 我注意到,其中一个队列 nsb.v2.verify-stream-flag-enabled 显示“集群占少数”。你能解释一下这是什么意思吗?它是否导致了所描述的内存问题?
流标志队列由 NServiceBus 在启动时创建,用于检查代理是否支持流队列,流队列由仲裁队列间接使用,以使超时基础设施可靠。
队列本身不用于任何消息传递,因此不会导致任何内存问题。
验证 Rabbitmq 日志是否存在任何问题,并按照 Adam 的建议运行
rabbitmqctl report
。另请参阅: