database - RabbitMQ 内存使用

标签 database memory-leaks statistics rabbitmq

我目前正在生产中在 Ubuntu(16.04) 上使用 RabbitMQ (3.6.2-1)。生产者发布消息,消费者消费消息,一切正常,但有时 RabbitMQ 不释放内存,它触及最大内存,生产者无法将消息发布到空队列中,所以我必须重新启动服务。

是bug还是别的什么?

enter image description here

更新:

它来自管理插件,因此您可以通过以下解决方案之一解决此问题:

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/

相关文章:

mysql - 极其基本的 SQL 误解

ios - 为什么 "[[UIDevice currentDevice] identifierForVendor]"会导致内存泄漏?

java - Java 中是否有用于测试序列非随机性的软件?

c++ - 在类的构造函数中初始化映射时如何避免内存泄漏?

java - Elasticsearch 搜索 thread_pool 的拒绝

machine-learning - 计算朴素贝叶斯分类中的概率

linux - 最佳鱿鱼日志文件分析工具

sql-server - 戈兰 : "Err TLS Handshake failed: tls: server selected unsupported protocol version 301" when trying to connect to sql server (diferent host)

java - Oracle PreparedStatement - 一些开发人员的 NullPointerException,但不是全部

sql - 如何在动态sql oracle中获取排序记录