首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >芹菜队列健康监测方法研究

芹菜队列健康监测方法研究
EN

Stack Overflow用户
提问于 2013-07-08 16:54:28
回答 3查看 7.1K关注 0票数 13

我有以下设置:

  • 有100名员工的通用员工池
  • 拥有50名工人的高优先工人池
  • 我使用了这么大的数字,因为我的任务大部分时间都在等待I/O,超时时间很长(执行HTTP请求可能需要20多个时间来响应)
  • 使用RabbitMQ作为代理
  • 我已经将celeryd设置为deamon,使用了来自芹菜的init.d 脚本,参数如下: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查看工作进程正在做什么,但到目前为止,这对于告诉我工作人员正在挂起是有用的。
  • 我如何监控这个,并可能进行自动恢复。有许多管理芹菜的工具(flowerevents,但它们在实时方面都很出色,但没有任何自动监控/报警功能)。我还是用监督d写我自己的监控工具好吗?

另外,我的任务也是从姜戈芹菜开始的。

EN

回答 3

Stack Overflow用户

发布于 2014-02-20 21:25:37

一个非常基本的队列监视狗可以用一个脚本来实现,这个脚本每分钟都由cron运行。首先,它触发一个任务,该任务在执行时(在工作人员中)触及一个预定义的文件,例如:

代码语言:javascript
运行
复制
with open('/var/run/celery-heartbeat', 'w'):
    pass

然后,脚本检查该文件上的修改时间戳,如果超过一分钟(或2分钟或任何其他时间),则发送警报和/或重新启动工作人员和/或代理。

如果你有多台机器,它会变得更棘手,但同样的想法也适用。

票数 4
EN

Stack Overflow用户

发布于 2013-07-09 08:25:35

@goro,如果您向外国服务提出请求,则应该尝试事件或事件池实现,而不是生成100500名员工。我也有问题,当芹菜工人停止消费任务时,它是由Celery+gevent+sentry(乌鸦)组合中的一个bug引起的。

我对芹菜的一件事是,如果一切都做好了(目前我每天做的任务超过5000万项),它可以在没有任何监控的情况下正常工作,但如果没有,监测对你没有太大帮助。芹菜中的“灾后恢复”有点棘手,并不是所有的东西都能像你预期的那样工作:

你应该打破你的解决方案在较小的和平,可能是分开的一些任务之间的不同队列。在某个时候,您会发现导致问题的代码片段。

票数 3
EN

Stack Overflow用户

发布于 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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17532052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档