跳到主要内容
版本:4.1

内存和磁盘报警

概述

在运行期间,RabbitMQ 节点将根据工作负载消耗不同数量的内存和磁盘空间。当使用量激增时,内存和可用磁盘空间都可能达到潜在的危险水平。对于内存,节点可能被操作系统内存不足进程终止机制(例如,Linux 上称为“OOM killer”)杀死。对于可用磁盘空间,节点可能会耗尽内存,这意味着它将无法执行许多内部操作。

为了降低这些情况发生的可能性,RabbitMQ 有两个可配置的资源水位线。当达到这些水位线时,RabbitMQ 将阻止发布消息的连接。

更具体地说,RabbitMQ 将阻止发布消息的连接,以避免被操作系统(内存不足杀手)杀死或耗尽所有可用的可用磁盘空间

节点将临时阻止发布连接,方法是暂停从客户端连接读取数据。仅用于消费消息的连接将不会被阻止。

连接心跳监控也将被停用。所有网络连接将在 rabbitmqctl 和管理 UI 中显示为 blocking(表示它们尚未尝试发布,因此可以继续)或 blocked(表示它们已发布,现在已暂停)。兼容的客户端将在被阻止时收到通知

仅消费的连接不会被资源报警阻止;向它们的交付将照常继续。

客户端通知

现代客户端库支持connection.blocked 通知(协议扩展),因此应用程序可以监控它们何时被阻止。

集群中的报警

在集群中运行 RabbitMQ 时,内存和磁盘报警是集群范围的;如果一个节点超过限制,则所有节点都将阻止连接。

这里的目的是停止生产者,但让消费者继续不受影响。但是,由于协议允许生产者和消费者在同一通道上以及单个连接的不同通道上操作,因此此逻辑必然是不完善的。在实践中,对于大多数应用程序而言,这不会造成任何问题,因为节流仅表现为延迟。然而,在允许其他设计考虑因素的情况下,建议仅将单个连接用于生产或消费。

对数据安全的影响

当报警生效时,发布连接将受到 TCP 反压的阻止。实际上,这意味着发布操作最终将超时或完全失败。应用程序开发人员必须准备好处理此类故障,并使用发布者确认来跟踪哪些消息已被 RabbitMQ 成功处理和处理。

文件描述符耗尽

当服务器即将用完操作系统为其提供的所有文件描述符时,它将拒绝客户端连接。请参阅网络指南以了解更多信息。

瞬时流控制

当客户端尝试发布的速率快于服务器接受其消息的速率时,它们将进入瞬时流控制

© . All rights reserved.