兔子mq高水位线集问题



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

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

=警告报告==== 2015 年 1 月 13 日::12:40:24 ===在节点"rabbit@matchpointgps-141110"上设置内存资源限制警报。


*

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


这在我们的服务器上发生了两次。我仍然无法为此找到正确的解决方案。

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

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

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

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

rabbitmqctl set_disk_free_limit 1GB 

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

如果您使用的是"bitnami/rabbitmq"docker 映像,则可以使用以下方式设置此变量:

RABBITMQ_DISK_FREE_ABSOLUTE_LIMIT: "1GB"

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

TL;DR 尽量保持队列空

最后,为 rabbitmq 队列找到了一些更好的配置。

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

CELERY_IGNORE_RESULT = 真

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

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

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

vm_memory_high_watermark.相对 = 0.9

执行此操作后,您必须重置 RabbitMQ 服务才能看到效果。希望这有帮助!

最新更新