1.Linux下docker安装的RabbitMQ版本是rabbitmq_3_8_1(系统运行内存512G两台,搭建的镜像集群)。
rabblitmq官网
2.数据量小的时候没有暴露出来问题,但是随着系统访问量增加,大概是5、6千万条的时候,就有一台broker的内存爆涨就触发了流控机制(默认占用到系统内存40%的时候触发),导致整个镜像集群停止工作。具体现象如下图:
所有连接都blocked了
3.内存使用情况查看
经查看,主要是系统预加载但是未使用的内存占用过大导致的。
4.初步的确定是系统内存使用情况报告的策略的问题(但是,两台服务端的策略一样,作为从服务的内存增涨的太吓人了)
官网
上关于这一块的描述是这样的,如下图:
默认用的是allocated,接下来我们看下中文翻译版的,如下图:
docker安装的时候,没有设置内存报告策略,应该是默认的allocated 但是,线上确实是rss,重新reset设置也是rss,测试环境docker新装了一个也是rss…
docker重置rabbitmq设置的命令,重置一下再重新加入集群
docker exec -it rabbit1 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit2
rabbitmqctl start_app
启动完查看策略用的还是rss模式,不确定是不是需要整个集群重启之后才生效,由于是生产环境,集群不能随便重启,至少保证一台服务能用。(后来看文档发现,不同版本的rabbitmq默认配置不一样)
5.现在暂时的解决方案是先给broker1杀掉,让broker2对外暴露服务,不影响用户正常使用,接下来计划在测试环境模拟线上问题,以备解决长远问题。
由于采用的是镜像队列的模式(ps:如果不清楚的可以先百度查询rabbitmq镜像队列原理),而且杀掉的broker本来就是从服务器,所以不用担心消息丢失的问题。
6.本次博客先记录下问题,后面彻底解决了在来总结。如果哪位大佬遇到过类似的问题,我们可以交流下,共同进步。
=============================================================
7.本次编辑于2021.09.07,继上次调试完之后,过了两天抱着试试的态度又启动另一台服务,竟然神奇的好了,到目前为止都还在正常运行,具体如下图: