由于RabbitMQ未设置Queues的TTL引发的血案
前两天运维突然提醒我们RabbitMQ服务器内存和CPU使用量异常爆满。接着依赖于RabbitMQ的所有服务GG······
进过对MQ服务器的检查发现一个异常进程:
这玩意儿是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分钟 后自动删除。
接下来这段时间一直安安稳稳 被安排得明明白白 。
以上完毕。