我正在使用带有RabbitMQ 3.6.14的celery 4.0.2,在连接到其中一台服务器上运行的rabbitmq-server的四台服务器上配置了五个队列。
在最近在生产服务器上部署之前,每件事情都运行良好,但在此之后,RabbitMQ会生成数千个不需要的队列,几个小时后,RAM使用量会很高(20G或更高),芹菜日志miss heartbeat
从其他芹菜服务器停止工作。
查看/var/lib/rabbitmq/mnesia/<server_name>/queues
显示数千个文件,rabbitmqctl list_queues
显示这些文件:
...
d143e25a2ffe4dbca881978d658739b1 1
6046df6f62bc422c981d416706fe4af2 1
4acc0d442fcd43a1b0ef379c370706b1 1
d24e24a680534e33a8572f38d29ea6cd 1
619f7c89b43c4400ad8bf4556ec968d6 1
ffa5a991910941d3a03b844f85880a26 1
41e66894e5c34ad5b32d3e4e6307138c 1
4dd03ac9171448759a7b964a91d7422b 1
24ff24e8fe074f5b979a9d4e4674ba08 1
16ff4b981c11422ca2d437a5fba05706 1
726271ce0ab04886acd7f59fd930dc82 1
c07a58e36fcd4623ae7c4210ef073bdf 1
....
我从未创建过这些文件(手动或在代码中)。此外,删除所有mnesia/queues
文件并重新启动RabbitMQ可以正常工作,但仅几个小时又会出现同样的问题。
我真的很感激你的帮助。
答案 0 :(得分:0)
我终于解决了这个问题。 Celery默认情况下,在完成任务时,会在以<id_of_the_task>
命名的队列中生成任务的结果。默认情况下,此队列将保留24小时,在我的情况下,每分钟生成数千个任务,因此,数百万个持久队列(24小时)。
因此,您可以根据celery docs将以下内容放入django项目的settings.py
(或celery.py
中的芹菜项目中。)
CELERY_RESULT_PERSISTENT = False
CELERY_IGNORE_RESULT = True
CELERY_TASK_IGNORE_RESULT = True
CELERY_TASK_RESULT_EXPIRES = 60
`