我有一个主服务器和6个工作服务器(每个服务器上运行着几个工作服务器(。突然之间,经过数月的完美执行,所有任务都停止执行,即使没有代码更改。现在,即使在重新启动所有涉及的服务器、重新启动 RabbitMQ、重新启动工作线程等之后,服务器似乎也无法找到彼此,因此无法完成任何任务。
当我运行celery -A proj inspect active
时,响应是Error: No nodes replied within time constraint.
我也能够使用 Flower 连接到代理,但它没有列出工作线程,即使工作线程正在运行并指向同一个代理。在负责添加任务的主服务器上,我的应用程序现在似乎无限期地挂起在apply_async
上。
在我的应用程序中,我将代理设置为 pyamqp,将后端设置为 rpc:
Celery('proj', broker='pyamqp://[master server's IP]', backend='rpc://[master server's IP]')
我觉得我错过了一些非常简单的东西,但我无法弄清楚它是什么。
导航到/var/log/rabbitmq/rabbit@[server-name].log
并滚动回问题首次发生的时间,导致我看到此消息Disk free space limit now exceeded. Free bytes:999378944 Limit:1000000000
。
事实证明,硬盘被填满了,这似乎给RabbitMQ和Celery带来了各种各样的麻烦。释放空间完全解决了所有问题。