【问题标题】:RabbitMQ not closing old connections with CeleryRabbitMQ 不关闭与 Celery 的旧连接
【发布时间】:2014-09-28 16:09:40
【问题描述】:

我将 Celery 与 Django 结合使用,将来自多个数据中心的约 20 名工作人员的任务消费/发布到 RabbitMQ。大约一个月后,我打开了 8000 个套接字描述符,并且数量不断增加,直到我重新启动 RabbitMQ。通常我“杀死 -9” Celery 工作进程而不是关闭它们,因为我不想等待工作完成。在工作人员身上,我看不到 RabbitMQ 显示的连接。有没有办法清除 RabbitMQ 中的旧连接?

我在 Ubuntu 14.04 上使用 Celery 3.1.13 和 RabbitMQ 3.2.4。我用的不是librabbitmq,而是pyamqp。

【问题讨论】:

    标签: django rabbitmq celery


    【解决方案1】:

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

    工人(Ubuntu 14.04)

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

    Django 应用服务器 (Ubuntu 14.04)

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

    Rabbit MQ 服务器(Ubuntu 14.04 | rabbitmq-server 3.2.4)


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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 1970-01-01
        • 2020-11-14
        • 1970-01-01
        • 2017-10-24
        • 2017-04-06
        相关资源
        最近更新 更多