一 问题描述
同事反馈rabbitmq有问题,登录管理界面,发现rabbitmq集群中的第二个节点内存使用率较高:
点击?看到有如下提示:
二 出错原因
默认情况下,RabbitMQ使用内存超过40%的时候,会发出内存警告,阻塞所有发布消息的连接,一旦警告解除(etc,服务器paging消息到硬盘或者分发消息到消费者并且确认)服务会恢复正常。
默认的内存阈值是40%,注意,这并不会阻止Rabbit MQ Server使用不到40%,仅仅意味着到达这个点的时候,发布者会被扼杀,最坏的情况下,Erlang虚拟机会引起双倍的内存使用(RAM的80%),强烈建议开启操作系统的SWAP和Page Files。
三 解决办法
① 扩服务器内存
② 若服务器内存足够,可用内存还很多,只是因为阀值低,可临时调高点水位线的阀值:
#这里调整到0.6
rabbitmqctl set_vm_memory_high_watermark 0.6
③ 如果配置了镜像队列,而某个队列未消费的消息数据量很大,则镜像队列比较耗内存。可排查下为何这个队列未消费的数据量为何这么大,是不是消费者程序没启动还是哪里有问题。