Rabbitmq高水印设置问题

问题描述 投票:0回答:5

这就是我在rabbitmq消息代理中得到的

=信息报告==== 2015 年 1 月 13 日::12:40:24 === vm_memory_high_watermark 设置。使用内存:478063864 允许:415868518

=警告报告==== 13-Jan-2015::12:40:24 === 在节点“rabbit@matchpointgps-141110”上设置内存资源限制警报。


* 发布者将被阻止,直到此警报清除*


这种情况在我们的服务器上发生过两次。 我仍然无法找到正确的解决方案。

rabbitmq
5个回答
2
投票

当队列长度变得非常高并且它尝试将消息写入磁盘但速度不够快时,我们遇到了类似的问题。在我们的测试中,当我们使用SSD驱动器时,没有出现这个问题。

对我们来说最简单的解决方案是通过在消息上设置 Durable=true 将消息立即写入磁盘。这也是一个好主意,因为如果兔子重新启动,队列中的数据不会丢失。


1
投票

我在 docker 上运行的rabbitMQ 服务器中遇到了类似的问题。一切都被封锁了,兔子不会接受任何消息。

我只是重新配置了磁盘可用空间限制

rabbitmqctl set_disk_free_limit 1GB 

这改变了“xx GiB低水位线”并解决了问题。

如果您使用“bitnami/rabbitmq”docker 镜像,您可以使用以下命令设置此变量:

RABBITMQ_DISK_FREE_ABSOLUTE_LIMIT: "1GB"

0
投票

看看这篇关于 RabbitMQ 队列如何使用内存的博客文章:http://www.rabbitmq.com/blog/2011/10/27/performance-of-queues-when-less-is-more/

TL;DR 尽量让队列保持空


0
投票

终于找到了一些更好的rabbitmq队列配置。

我在 celery 配置中添加了以下行,因为它为每个任务创建一个额外的队列。

CELERY_IGNORE_RESULT = True

还为我的任务创建了单独的队列。 这可以保持内存空闲并准备好承担更繁重和更长的任务

更多信息 https://denibertovic.com/posts/celery-best-practices/


0
投票

默认情况下,如果 RabbitMQ 开始使用超过 40% 的可用内存,它将阻止传入消息。如果您打开“rabbitmq.conf”文件(通常保存在计算机上的 AppData 文件夹中),您可以增加该文件。我通过添加以下行将其更改为 90%:

vm_memory_high_watermark.relative = 0.9

执行此操作后,您必须重置 RabbitMQ 服务才能看到效果。

© www.soinside.com 2019 - 2024. All rights reserved.