非Docker环境下Django Celery报WorkerLostError SIGKILL错误是什么原因?
Django Celery WorkerLostError: signal 9 (SIGKILL) 触发原因(非Docker部署场景)
首先明确错误本质:signal 9 (SIGKILL)是操作系统层面的强制杀进程信号,无法被进程捕获、忽略或阻塞,该错误是Celery的工作进程被系统主动杀掉后,billiard组件检测到worker异常退出抛出的异常。
常见触发原因如下:
- 系统内存不足触发OOM Killer:这是最常见的诱因,当Celery worker执行的任务占用内存过高,系统剩余内存不足以支撑进程运行时,Linux内置的OOM Killer(内存溢出杀手)会自动选择占用内存最高的进程发送SIGKILL信号释放内存。你可以通过查看系统日志验证:Debian/Ubuntu系统查看
/var/log/syslog,CentOS/RHEL系统查看/var/log/messages,搜索是否存在Out of memory: Kill process相关记录,记录中会明确标注被杀死的进程ID是否对应异常退出的Celery worker。 - 人为或脚本主动执行强制杀进程操作:如果管理员或运维脚本对Celery worker进程执行了
kill -9命令,也会触发该错误。 - 系统资源限制超限:如果Celery运行的系统用户配置了
ulimit资源限制(比如最大内存占用、最大进程数等),当worker运行过程中占用资源超出阈值时,系统会直接发送SIGKILL杀掉超限进程。 - Celery硬超时规则触发:如果你启动Celery worker时配置了
--time-limit(硬超时时间)参数,当任务执行时长超出硬超时阈值时,Celery会主动给worker进程发送SIGKILL信号终止进程,避免异常任务长时间占用资源,此时也会抛出该错误。
内容的提问来源于stack exchange,提问作者Riyas Ac
相关产品推荐
相关产品推荐

