我目前正在生产中的Ubuntu(16.04)上使用RabbitMQ(3.6.2-1)。生产者发布消息,而使用者使用消息,一切正常,但是有时候RabbitMQ不会释放内存,它会占用最大内存,并且生产者无法将消息发布到空队列中,因此我必须重新启动服务。
是错误还是其他?
更新:
来自管理插件,因此您可以通过以下解决方案之一解决此问题:
1。更新RabbitMQ版本(3.6.15稳定)
2。定期(每小时crontab)重新启动统计数据库https://www.rabbitmq.com/management.html#stats-db
3。在rabbitmq.config文件中将rates_mode设置为none(这不是一个好主意,因为在这种情况下,您看不到消息速率)
答案 0 :(得分:1)
您应该检查队列中包含的消息数。
默认情况下,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版本here的所有细节