我有以下设置:
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
查看工作进程正在做什么,但到目前为止,这对于告诉我工作人员正在挂起是有用的。flower
和events
,但它们在实时方面都很出色,但没有任何自动监控/报警功能)。我还是用监督d写我自己的监控工具好吗?另外,我的任务也是从姜戈芹菜开始的。
发布于 2014-02-20 21:25:37
一个非常基本的队列监视狗可以用一个脚本来实现,这个脚本每分钟都由cron运行。首先,它触发一个任务,该任务在执行时(在工作人员中)触及一个预定义的文件,例如:
with open('/var/run/celery-heartbeat', 'w'):
pass
然后,脚本检查该文件上的修改时间戳,如果超过一分钟(或2分钟或任何其他时间),则发送警报和/或重新启动工作人员和/或代理。
如果你有多台机器,它会变得更棘手,但同样的想法也适用。
发布于 2013-07-09 08:25:35
@goro,如果您向外国服务提出请求,则应该尝试事件或事件池实现,而不是生成100500名员工。我也有问题,当芹菜工人停止消费任务时,它是由Celery+gevent+sentry(乌鸦)组合中的一个bug引起的。
我对芹菜的一件事是,如果一切都做好了(目前我每天做的任务超过5000万项),它可以在没有任何监控的情况下正常工作,但如果没有,监测对你没有太大帮助。芹菜中的“灾后恢复”有点棘手,并不是所有的东西都能像你预期的那样工作:
你应该打破你的解决方案在较小的和平,可能是分开的一些任务之间的不同队列。在某个时候,您会发现导致问题的代码片段。
发布于 2014-02-13 08:47:21
我认为这是因为工人们预先抓取任务。如果这仍然是一个问题,您可以将芹菜更新为3.1并使用-Ofair
worker选项。我在-Ofair
之前尝试使用的配置选项是CELERYD_PREFETCH_MULTIPLIER
。但是,设置CELERYD_PREFETCH_MULTIPLIER = 1
(其最低值)没有帮助,因为工作人员仍然会提前预取一个任务。
参见http://docs.celeryproject.org/en/latest/whatsnew-3.1.html#prefork-pool-improvements,特别是http://docs.celeryproject.org/en/latest/whatsnew-3.1.html#caveats。
https://stackoverflow.com/questions/17532052
复制相似问题