Django celery WorkerLostError:工人过早退出:信号9(SIGKILL)错误

问题描述 投票:0回答:4

在生产 virtualenv 中将芹菜作为守护进程运行的最佳实践是什么?我在本地环境中使用以下内容,效果完美,接收任务按预期工作。但是在生产中总是停留在

WorkerLostError: Worker exited prematurely: signal 9 (SIGKILL) error

我在本地和生产中使用以下配置:

/etc/default/celeryd:

CELERY_BIN="path/to/celery/bin"
CELERY_APP="myproj"
CELERYD_CHDIR="home/myuser/project/myproj"
CELERYD_OPTS="--time-limit=300 --concurrency=4"
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
CELERYD_USER="myuser"
CELERYD_GROUP="myuser"
CELERY_CREATE_DIRS=1

/etc/init.d/celeryd:[celeryd]

包和操作系统版本信息:

  1. Ubuntu == 16.04.2
  2. 芹菜 == 4.1.0
  3. rabbitmq == 3.5.7
  4. 姜戈 == 2.0.1

我在让芹菜作为守护进程运行时也使用了这些命令:

  1. sudo chown -R root:root /var/log/celery/
  2. sudo chown -R root:root /var/run/celery/
  3. sudo update-rc.d celeryd defaults
  4. sudo update-rc.d celeryd enable
  5. sudo /etc/init.d/celeryd start

这是我的 django settings.py 芹菜配置:

CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite'
CELERY_TASK_SERIALIZER = 'json'

需要专家建议才能使 celery 守护进程在生产 virtualenv 中正常工作。提前致谢!

django celery virtualenv production-environment
4个回答
1
投票

除非您为 rabbitmq 创建了单独的虚拟主机和用户,否则请将 CELERY_BROKER_URL 设置为

amqp://guest@localhost//

此外,您应该将

/var/log/celery/
/var/run/celery/
的所有者设置为“myuser”,而不是 root,就像您在 celeryd 配置中设置的那样


1
投票

我猜这可能是 OOM 的症状。我在 Docker 容器中部署了一个 Celery 后端——“它在我的机器上工作”但在集群中没有。我为任务分配了更多的内存,不再有问题了。


1
投票

由于在

中发现内存不足错误,我得到了这个错误

/var/log/kern.log

我在我的一项任务中运行了 Tensorflow,这需要额外的计算能力,但我的物理内存 (RAM) 不足以处理那么多负载。我很奇怪除了 SigKill 9 错误之外没有登录 celery。但是内核日志帮助我修复了它。


0
投票

在 docker 的情况下,我只是分配了更多的资源并且它起作用了。

© www.soinside.com 2019 - 2024. All rights reserved.