内存和磁盘警告
有两种情况下,Rabbit MQ会停止读取客户端的连接socket,为了防止crash崩溃,这两种情况是:
内存使用达到配置值
磁盘空间下降到配置值下
在这两种情况下,服务器会临时阻塞连接—服务器会暂停读取发布消息的客户端的连接,连接心跳监控也会被禁用,在rabbitmqctl和管理查建中的所有网络连接如果是blocking状态,意味着他们没有尝试发送,因此可以继续,如果是blocked状态,意味着他们已经发布了,现在需要被暂停。
集群的警告
当运行Rabbit MQ集群的时候,内存和磁盘警告是集群范围的,如果一个节点达到了限制,所有的节点都会阻塞连接。
这样的意图是停止生产者,但是让消费者继续不受影响,但是因为协议允许生产者和消费者在同一个Channel或者同一个连接的不同Channel上进行操作,这个逻辑是不完美的,在实践中,不会产生任何问题,因为节流作为一种延迟被观察,尽管如此,建议使用单独的连接分别作为生产和消费。
文件描述符耗尽 Running out of File Descriptors
当服务器使用了操作系统分配给它的所有文件描述符,它会拒绝客户端连接,参考 “
网络指南
” 学习更多。
当客户端尝试发送比服务器接收消息快的时候,它们会进入瞬时的流控。
相关主题
内存如何限制工作
磁盘如何限制工作
客户端可以检测它们是否被阻塞
内存警告
Rabbit MQ服务器在启动和执行 rabbitmqctl set_vm_memory_high_watermark
fraction
的时候会检测机器上的RAM大小,默认情况下,Rabbit MQ使用内存超过40%的时候,会发出内存警告,阻塞所有发布消息的连接,一旦警告解除(etc,服务器paging消息到硬盘或者分发消息到消费者并且确认)服务会恢复正常。
默认的内存阈值是40%,注意,这并不会阻止Rabbit MQ Server使用不到40%,仅仅意味着到达这个点的时候,发布者会被扼杀,最坏的情况下,Erlang虚拟机会引起双倍的内存使用(RAM的80%),强烈建议开启操作系统的SWAP和Page Files。
32位架构每个进程的内