我有以下设置:
- 具有 100 个工人的通用工人池
- 具有 50 个工人的高优先级工人池
- 我使用了这么大的数字,因为我的任务大部分时间都花在等待 I/O 上,而且超时时间很长(执行 HTTP 请求可能需要 20 秒才能响应)
- 使用 RabbitMQ 作为代理
- 我已经使用 celery'd github 中的 init.d脚本将 celeryd 设置为守护进程,并具有以下参数:
CELERYD_OPTS="--time-limit=600 -c:low_p 100 -c:high_p 50 -Q:low_p low_priority_queue_name -Q:high_p high_priority_queue_name"
我的问题是,有时队列似乎“备份”......也就是说它会停止消费任务。似乎有这种情况:
- 代理中“未确认”消息的缓慢积累,尽管
celery inspect active
会显示并非所有工作人员都已用完 - 也就是说,我只会看到一些活动任务 - 队列将停止消耗新任务,而不会增加。
- 当处于“死”状态时,
strace
在工作进程上使用不会返回任何内容......工作人员的活动完全为零
我将不胜感激有关以下方面的任何信息或指示:
- 我如何调试它。我可以
strace
用来查看工作进程正在做什么,但到目前为止,这对于告诉我工作人员正在挂起很有用 - 我如何监控这一点,并可能进行自动恢复。管理 celery 的工具有很多(
flower
但events
它们都具有出色的实时性——但没有任何自动监控/报警功能)。我最好用supervisord编写自己的监控工具吗?
另外,我从 django-celery 开始我的任务