导航
导航

rabbitmq阻塞异常排查

测试环境反馈行云系统上所有的消息队列都不消费了,看了一下Connections连接,发现全部都发生阻塞了,导致线上的队列堆积。

还好只是测试环境,开始不紧不慢开始排查问题,(这里提一句,如果是线上环境优先恢复生产然后再排查问题)

经检查生产者和消费者都良好,这就纳闷了,难道是MQ机器的问题?拉上了运维老大哥一起排查。

拉mq日志/var /log/rabbitmq/ 通过错误日志发现

vm_memory_high_watermark clear. Memory used:383597048 allowed:385616281
memory resource limit alarm cleared on node rabbit@VM_2_12_centos

好了,mq的运行内存超过限制导致出现的问题

这时候借助万能的搜索引擎了,上网翻资料

因为RabbitMQ服务器在启动时会计算系统内存总大小。然后会根据vm_memory_high_watermark参数指定的百分比,进行控制.可通过命令 rabbitmqctl set_vm_memory_high_watermark fraction 动态设置。默认下,vm_memory_high_watermark的值为0.4,当RabbitMQ使用的内存超过40%时,系统会阻塞所有连接。一旦警报解除(消息被消费者取走,或者消息被写到硬盘中),系统重新恢复工作。32位系统的单进程内存使用最大为2G,即使系统有10G,那么内存警报线为2G*40%.

解决方法

vm_memory_high_watermark值上调