翻墙被狗咬
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

由于RabbitMQ未设置Queues的TTL引发的血案

起因

前两天运维突然提醒我们RabbitMQ服务器内存和CPU使用量异常爆满。接着依赖于RabbitMQ的所有服务GG······

进过对MQ服务器的检查发现一个异常进程:

f5fa8491ec25a4e5d56395bfbbc47af3

Beam.smp:

这玩意儿是Erlang的虚拟机,类似于 JVM。负责最终执行Erlang虚拟机进程的。

在RabbitMQ可理解为负责处理众多消息的线程。

在翻找了一大堆Google搜索结果之后。我发现了这篇文章 。它表明高cpu负载可能是由未被释放的未使用队列引起的。

在翻找RabbitMQ官方文档时我发现了这个策略设置选项

所以我的最终处理办法 设置queue的TTL

[root@dc-mq181 ~]# rabbitmqctl set_policy expiry ".*" '{"expires":18000000}' --apply-to queues
Setting policy "expiry" for pattern ".*" to "{"expires":18000000}" with priority "0" for vhost "/" ...

Queue将在未使用的 300分钟 后自动删除。

接下来这段时间一直安安稳稳 被安排得明明白白 。

以上完毕。