You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Railway部署Celery遇SIGKILL错误,Worker进程启动失败求助

问题分析与解决方案

从日志来看,Celery Worker的多个ForkPoolWorker进程被系统以signal 9 (SIGKILL)终止,最终触发WorkerLostError,核心原因是内存资源耗尽——系统为了避免整体崩溃,主动杀掉了占用过多内存的worker进程。

日志中显示Celery的并发数设置为32 (prefork),这个数值远超Railway普通实例的内存承载能力(比如默认starter实例通常只有512MB-1GB内存),32个worker进程同时启动会瞬间占满内存,触发系统OOM(内存不足)杀进程机制。

解决步骤

  • 降低Celery并发数:启动Celery worker时显式指定更小的并发数,根据Railway实例内存调整,比如设置为4:

    celery -A Instagram worker --concurrency=4 --loglevel=info
    

    可先从2-4开始测试,逐步调整到实例能稳定承载的数值。

  • 调整Railway实例资源配置:如果业务需要更多worker,升级Railway实例规格,提升内存配额,确保有足够资源支撑所需并发数。

  • 优化任务内存占用:检查users.tasks.update_instagram_stats任务逻辑,排查是否存在内存泄漏(如未关闭的文件/连接、大量数据长期驻留内存),优化任务内存使用效率,减少单个worker的内存消耗。

  • 启用自动缩放:使用Celery的--autoscale参数让worker根据系统负载自动调整数量,比如设置最大8个、最小2个:

    celery -A Instagram worker --autoscale=8,2 --loglevel=info
    

相关日志

User information: uid=0 euid=0 gid=0 egid=0
warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(

\-------------- celery@railway v5.2.7 (dawn-chorus)
\--- ***** -----
\-- ******* ---- Linux-4.19.0-22-cloud-amd64-x86_64-with-glibc2.2.5 2023-04-17 08:23:15

- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app:         Instagram:0x7f543f2c43d0
- ** ---------- .> transport:   amqps://cxcarasm:**@armadillo.rmq.cloudamqp.com:5671/cxcarasm
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 32 (prefork)
  -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
  --- ***** -----
  -------------- [queues]
  .> celery           exchange=celery(direct) key=celery

[tasks]
. users.tasks.update_instagram_stats
[2023-04-17 08:23:28,093: INFO/MainProcess] Connected to amqps://cxcarasm:**@armadillo.rmq.cloudamqp.com:5671/cxcarasm
[2023-04-17 08:23:29,212: INFO/MainProcess] mingle: searching for neighbors
[2023-04-17 08:23:32,781: INFO/MainProcess] mingle: all alone
[2023-04-17 08:23:35,175: INFO/MainProcess] celery@railway ready.
[2023-04-17 08:23:35,176: ERROR/MainProcess] Process 'ForkPoolWorker-30' pid:42 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,186: ERROR/MainProcess] Process 'ForkPoolWorker-29' pid:41 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,197: ERROR/MainProcess] Process 'ForkPoolWorker-28' pid:40 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,207: ERROR/MainProcess] Process 'ForkPoolWorker-27' pid:39 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,218: ERROR/MainProcess] Process 'ForkPoolWorker-26' pid:38 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,228: ERROR/MainProcess] Process 'ForkPoolWorker-25' pid:37 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,239: ERROR/MainProcess] Process 'ForkPoolWorker-24' pid:36 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,249: ERROR/MainProcess] Process 'ForkPoolWorker-23' pid:35 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,260: ERROR/MainProcess] Process 'ForkPoolWorker-22' pid:34 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,270: ERROR/MainProcess] Process 'ForkPoolWorker-21' pid:33 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,281: ERROR/MainProcess] Process 'ForkPoolWorker-20' pid:32 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,291: ERROR/MainProcess] Process 'ForkPoolWorker-19' pid:31 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,301: ERROR/MainProcess] Process 'ForkPoolWorker-18' pid:30 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,312: ERROR/MainProcess] Process 'ForkPoolWorker-17' pid:29 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,322: ERROR/MainProcess] Process 'ForkPoolWorker-16' pid:28 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,333: ERROR/MainProcess] Process 'ForkPoolWorker-15' pid:27 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,343: ERROR/MainProcess] Process 'ForkPoolWorker-13' pid:25 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,354: ERROR/MainProcess] Process 'ForkPoolWorker-12' pid:24 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,364: ERROR/MainProcess] Process 'ForkPoolWorker-2' pid:14 exited with 'signal 9 (SIGKILL)'
[2023-04-17 08:23:35,571: CRITICAL/MainProcess] Unrecoverable error: WorkerLostError('Could not start worker processes')
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/celery/worker/worker.py", line 203, in start
self.blueprint.start(self)
File "/usr/local/lib/python3.8/site-packages/celery/bootsteps.py", line 116, in start
step.start(parent)
File "/usr/local/lib/python3.8/site-packages/celery/bootsteps.py", line 365, in start
return self.obj.start()
File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py", line 332, in start
blueprint.start(self)
File "/usr/local/lib/python3.8/site-packages/celery/bootsteps.py", line 116, in start
step.start(parent)
File "/usr/local/lib/python3.8/site-packages/celery/worker/consumer/consumer.py", line 628, in start
c.loop(*c.loop_args())
File "/usr/local/lib/python3.8/site-packages/celery/worker/loops.py", line 71, in asynloop
raise WorkerLostError('Could not start worker processes')
billiard.exceptions.WorkerLostError: Could not start worker processes
celery beat v5.2.7 (dawn-chorus) is starting.
fffffffffffffffffff
__    -    ... __   -        _
LocalTime -> 2023-04-17 08:23:42
Configuration ->
. broker -> amqps://cxcarasm:**@armadillo.rmq.cloudamqp.com:5671/cxcarasm
. loader -> celery.loaders.app.AppLoader
. scheduler -> celery.beat.PersistentScheduler
. db -> celerybeat-schedule
. logfile -> [stderr]@%INFO
. maxinterval -> 5.00 minutes (300s)
[2023-04-17 08:23:42,480: INFO/MainProcess] beat: Starting...
[2023-04-17 08:23:43,404: INFO/MainProcess] Scheduler: Sending due task update_instagram_stats (users.tasks.update_instagram_stats)
[2023-04-17 08:26:42,702: INFO/MainProcess] Scheduler: Sending due task update_instagram_stats (users.tasks.update_instagram_stats)

内容的提问来源于stack exchange,提问作者ulfet Bayramlı

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:44:58