rabbitmq 故障记录

1 集群某一节点内存不足导致消费异常

1 mq管理页面显示一个节点内存报警,mq官方文档说明,内存超出阈值会导致所有连接被阻塞

update memory details  显示其other 为3.8G

 

 

rabbitmqctl status 查看内存

 

 

2 零时解决方法

在broker运行过程中修改:rabbitmqctl set_vm_memory_high_watermark 0.6

 查询修改是否成功:

 

 

 

已恢复可以使用,但是Erlang processes 分布异常需进一步跟进处理,erlang内存分析方法:  https://www.cnblogs.com/yunqingtuo/p/14445682.html

2 内存高的问题

1 手动回收erlang GC 以及释放420万条消息后内存仍然没有释放,最终重启此节点,解决释放内存的问题 (重启前先将此节点从LB中摘掉,然后安全操作)

rabbitmqctl  stop_app

 

 

rabbitmqctl  start_app

other部分内存释放,

 

 重启后过一段时间开发同学报rabbitmq 周期性连接失败问题,

 重启此ram节点导致新的问题出现,最好将此节点从集群中剔除,

# 集群剔除节点

# 在要剔除的节点上执行
rabbitmqctl stop
# 在其余俩节点分别执行
rabbitmqctl forget_cluster_node rabbit@node1

# 将节点加入集群

# 在要加入的节点上执行
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbitpro01-fn --ram
rabbitmqctl start_app

 

 RabbitMQ 将每个队列设计为一个 Erlang 进程,Erlang 进程GC也是采用分代策略,当新老生代一起参与Major GC时,Erlang虚拟机会新开内存,根据root set将存活的对象拷贝至新空间,这个过程会造成新老内存空间同时存在,极端情况下,一个队列可能短期内需要两倍的内存占用量,所以内存流控阀值设置为0.4相对是一个比较安全的值,设置太高,有可能系统内存被全部占用导致系统进程 kill RabbitMQ进程,设置过低导致内存使用率不高。

因为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%.

 

 

2 rabbitmq 磁盘空间打满由于某一消息队列消息积压

由于某一消息队列 消息积压(1.5亿条消息)导致 磁盘空间使用率100%(三个节点都打满)

通过web界面qeues->purge删除消息导致界面卡死,最终使用命令行删除 :rabbitmqctl purge_queue qeueuname

删除过程比较耗时,需等待一段时间,最终删除成功,三个节点的磁盘使用率降下来

posted @ 2021-02-23 11:23  云清拓  阅读(999)  评论(0)    收藏  举报