【问题标题】:How do I troubleshoot an exit timeout of celeryd when running on Heroku (error R12)?在 Heroku 上运行时,如何解决 celeryd 的退出超时问题(错误 R12)?
【发布时间】:2012-09-07 13:07:30
【问题描述】:

我在 Heroku dyno 上运行 celeryd。当我关闭它并且它之前已经处理(甚至完成)了至少一项任务时,它没有正确关闭并且我从 Heroku 收到错误 R12(退出超时)。

这是我从 Procfile 运行 celeryd 的方式(通过 Django 和 django-celery):

celeryd: python manage.py celeryd -E --loglevel=INFO

这是触发它的方法:

> heroku ps:scale web=0 celeryd=0 --app myapp

这是我得到的日志输出:

2012-09-07T12:56:31+00:00 heroku[celeryd.1]: State changed from up to down
2012-09-07T12:56:31+00:00 heroku[api]: Scale to celeryd=0, web=1 by mail@mydomain.com
2012-09-07T12:56:32+00:00 heroku[web.1]: State changed from up to down
2012-09-07T12:56:32+00:00 heroku[api]: Scale to web=0 by mail@mydomain.com
2012-09-07T12:56:34+00:00 heroku[celeryd.1]: Stopping all processes with SIGTERM
2012-09-07T12:56:35+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2012-09-07T12:56:37+00:00 heroku[web.1]: Process exited with status 143
2012-09-07T12:56:43+00:00 heroku[celeryd.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 10 seconds of SIGTERM
2012-09-07T12:56:43+00:00 heroku[celeryd.1]: Stopping remaining processes with SIGKILL
2012-09-07T12:56:45+00:00 heroku[celeryd.1]: Process exited with status 137

最初,我在 celery 2.5.5 上遇到过这种情况。现在升级到 3.0.9 还是一样的问题。

据我所知,我的任务已经全部完成。通过在 celery dyno 上运行单个任务,给它足够的时间来完成然后关闭 dyno,这个错误可以可靠地重现。

我不知道还要检查什么。知道如何解决这个问题吗?当任务已经完成时,什么会阻止 celeryd 响应 Heroku 的 SIGTERM?

【问题讨论】:

  • 最终解决了这个问题?我遇到了同样的问题。
  • @Murph 我从来没有弄清楚,但我也无法再复制它。但是,我现在正在运行一个完全不同的配置,使用最新的 celery 和 django-celery 以及更复杂的 Procfile,多个工作人员的单独进程、cam 和 beat 在同一个 dyno 上。
  • 我也被这个问题困住了,请参阅github.com/yuvadm/heroku-periodical/issues/1
  • 我仍然/再次在 celery 3.1.11 上遇到这个问题。不幸的是没有解决。 :(

标签: heroku celery django-celery celeryd


【解决方案1】:

我遇到了同样的问题。我不确定,但它may have been fixed

带有 -B 参数的 Worker 没有正确关闭节拍实例。

因此,如果您在工作实例中使用 celery beat,则可能需要升级。

【讨论】:

  • 确实,听起来不错,感谢您的提示!太糟糕了,他们没有在变更日志上注明相应的票证。
  • 刚刚停止并重新启动了我的工作人员,但仍然遇到同样的问题。不过,这似乎是 Celerybeat 的一个问题。在日志中,我看到所有工作人员都成功关闭,但随后INFO/MainProcess beat: Shutting down...heroku[worker.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 10 seconds of SIGTERM 之后不久
  • 仅供参考,在单独的测功机上运行 Celerybeat 以及在与工作人员相同的测功机上运行时,我遇到了同样的问题。
【解决方案2】:

这听起来像 celery 没有捕获 SIGTERM 信号并对其做出反应,一直等到 SIGKILL 到达。

此拉取请求可能会对您有所帮助:https://github.com/cybertoast/celery/commit/e9a007b982b0f9268174ae94b351a9275eaef4a3

【讨论】:

  • 我不太明白这有什么关系。它看起来像 CentOS 的 init.d 脚本,这对 Heroku 有什么帮助?它似乎也只是试图“更努力地杀戮”。 Heroku 已经为我做到了,问题是为什么 Celery 没有正确响应 SIGTERM。
猜你喜欢
  • 2021-10-28
  • 1970-01-01
  • 2013-07-19
  • 2015-01-19
  • 2021-08-07
  • 2016-06-04
  • 1970-01-01
  • 2021-09-08
  • 2017-02-15
相关资源
最近更新 更多