RabbitMQ 内存使用情况

7

我目前在生产环境中使用的是Ubuntu(16.04)上的RabbitMQ(3.6.2-1)。生产者发布消息,消费者消费消息,一切都正常工作,但有时RabbitMQ不会释放内存,并且会触及最大内存,生产者无法将消息发布到空队列中,因此我不得不重新启动服务。

这是一个bug还是其他什么问题?

输入图像描述

更新:

这是来自管理插件的问题,所以您可以通过以下解决方案之一解决此问题:

1.升级您的RabbitMQ版本(3.6.15是稳定版本)

2.定期重启统计数据库(在crontab每小时)https://www.rabbitmq.com/management.html#stats-db

3.在rabbitmq.config文件中将rates_mode设置为none(这不是一个好主意,因为在这种情况下,您将无法看到消息速率)


你的RabbitMQ服务器中有多少个队列、消费者和连接? - menya
我有10个队列,60个连接和20个通道。 - Milux
1个回答

2

你应该检查你的队列中有多少条消息。

RabbitMQ默认将消息保存在内存中以提高速度。

如果你需要处理大量消息,可以使用惰性队列: https://www.rabbitmq.com/lazy-queues.html 使用惰性队列,你可以处理数百万条消息而不会对节点内存产生太大影响。

或者这可能是一个管理内存问题,请参见: http://rabbitmq.com/management.html#stats-db 在你的情况下,你可以运行:

rabbitmqctl eval 'supervisor2:terminate_child(rabbit_mgmt_sup_sup, rabbit_mgmt_sup), rabbit_mgmt_sup_sup:start_child().' 来重置统计信息并释放内存。你可以定期调用它。

注意:

重置统计信息有不同的方法,这取决于RabbitMQ版本,在这里可以找到所有细节。


尝试重置统计数据库 rabbitmqctl eval 'supervisor2:terminate_child(rabbit_mgmt_sup_sup, rabbit_mgmt_sup), rabbit_mgmt_sup_sup:start_child().' - Gabriele Santomaggio
请点击此处了解更多详情:https://www.rabbitmq.com/management.html#stats-db - Gabriele Santomaggio
是的,它在运行时工作!可能是来自管理插件。我应该将rates_mode更改为none。 - Milux
@Milad 更新了答案以供未来读者参考。您无需更改 rates_mode,只需定期调用 reset 即可。顺便说一句,我建议更新版本,您正在使用的版本有点旧。 - Gabriele Santomaggio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接