RabbitMQ没有关闭与Celery的旧连接

时间:2014-08-05 21:03:16

标签: django rabbitmq celery

我使用带有Django的Celery来从几个数据中心的~20名工作者那里向RabbitMQ使用/发布任务。大约一个月左右后,我在8000个开放套接字描述符,并且数字不断增加,直到我重新启动RabbitMQ。我经常“杀掉-9”芹菜工人流程而不是关闭它们因为我不想等待工作完成。在工人身上,我没有看到RabbitMQ正在显示的连接。有没有办法清除RabbitMQ中的旧连接?

我正在使用Celery 3.1.13和RabbitMQ 3.2.4,所有这些都在Ubuntu 14.04上。我不使用librabbitmq,而是使用pyamqp。

2 个答案:

答案 0 :(得分:3)

我在以下3机器设置中遇到了同样的问题:

工人(Ubuntu 14.04)

amqp==1.4.6
celery==3.1.13
kombu==3.0.21

Django App Server(Ubuntu 14.04)

amqp==1.4.2
celery==3.1.8
kombu==3.0.10

Rabbit MQ Server(Ubuntu 14.04 | rabbitmq-server 3.2.4)


工作人员收到的每个任务都打开了一个从未关闭的连接(根据RabbitMQ日志)并消耗了大约2-3 MB的内存。

我已经将Celery升级到我的Django服务器上的最新版本,并且套接字描述符和内存使用量保持稳定。

我也看到任务完成后RabbitMQ日志中的连接关闭,如下所示:

closing AMQP connection <0.12345.0> (192.168.1.100:54321 -> 192.168.1.100:5672):
connection_closed_abruptly

答案 1 :(得分:0)

在Django的BROKER_HEARTBEAT文件中使用settings.py

RabbitMQ期望来自客户端的这个值(在这种情况下是Celery)。

参考 http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-broker_heartbeat了解更多详情。