我目前正在生产中在 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 将消息保存在内存中以提高速度。
如果您必须处理大量消息,则可以使用惰性队列:
https://www.rabbitmq.com/lazy-queues.html
使用惰性队列,您可以处理数百万条消息,而不会对节点内存造成太大影响。
或者它可能是一个管理内存问题,请参阅:
http://rabbitmq.com/management.html#stats-db
在你的 canse 中,你可以运行:
rabbitmqctl eval 'supervisor2:terminate_child(rabbit_mgmt_sup_sup, rabbit_mgmt_sup), rabbit_mgmt_sup_sup:start_child().'
重置统计数据并释放内存。
你可以定期调用它
注:
重置统计信息有多种方法,这取决于rabbitmq 版本,here所有的细节
关于database - RabbitMQ 内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53007569/