A customer reported a function is not working in our django app. That app runs using celery and RabbitMQ. I found out that the celery worker cannot receive tasks from RabbitMQ. Then I checked my RabbitMQ cluster, both servers in the cluster are having a very high cpu load.
I googled and found this article. It suggests the high cpu load may be caused by unused queues not being freed.
So I went though the official RabbitMQ doc and found the Queue TTL policy might be useful. TTL policy will delete unused queue after the expire time you specified.
You can set the policy via
rabbitmqctl set_policy expiry ".*" '{"expires":1800000}' --apply-to queues
This example will expire any queue in the default / vhost after it has been unused for 30 minutes.
本文介绍了解决RabbitMQ集群CPU负载过高的方法。通过分析发现,未被释放的空闲队列导致了资源占用过高。采用设置队列TTL策略的方式,使长时间未使用的队列自动删除,有效降低了系统负载。
730

被折叠的 条评论
为什么被折叠?



