我最近開始在一個新的Django項目中使用芹菜。設置:WorkerLostError('工人過早退出:信號15(SIGTERM)。')
-------------- [email protected] v3.1.7 (Cipater)
---- **** -----
--- * *** * -- Linux-3.8.11-ec2-x86_64-with-debian-squeeze-sid
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: nextlanding_api:0x1c23250
- ** ---------- .> transport: redis://[email protected]
- ** ---------- .> results: djcelery.backends.database:DatabaseBackend
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ----
--- ***** ----- [queues]
-------------- .> celery exchange=celery(direct) key=celery
software -> celery:3.1.7 (Cipater) kombu:3.0.8 py:2.7.4
billiard:3.3.0.13 redis:2.9.0
platform -> system:Linux arch:64bit, ELF imp:CPython
loader -> celery.loaders.app.AppLoader
settings -> transport:redis results:djcelery.backends.database:DatabaseBackend
我們正在調查中,任務與ETA 24+小時是消失的問題(我已經確保了visibility_timeout爲> 24小時)。當我熱烈關閉工作人員時,日誌語句顯示正在確認的幾條消息。例如: Restoring 26 unacknowledged message(s).
但是,我預計約50個左右未確認的消息要恢復。看看我的日誌更接近,我看到:
[ERROR] celery.worker.job: Task myproj_task[xxx] raised unexpected: WorkerLostError('Worker exited prematurely: signal 15 (SIGTERM).',)
...
WorkerLostError: Worker exited prematurely: signal 15 (SIGTERM).
Restoring 26 unacknowledged message(s).
Process exited with status 0
我見過其他人報告OOM殺死他們的過程。我在Heroku上,沒有看到R14的代碼。
上下文的最後一點,我從我的任務中產生新的進程。
我的問題是:WorkerLostError是我應該擔心的事情嗎?狀態碼是15(SIGTERM),似乎沒問題。如果這個錯誤不正常,是否會失去ETA任務?
編輯
起初,我以爲項目是消失但只是在一些詳細日誌後,可以看我的任務是發行,但在Redis的永遠堅持:
myproj_email_task was sent. task_id: b6ce2b97-d5b8-4850-9e43-9185426cd9f6
但是,查看redis中的任務,任務b6ce2b97-d5b8-4850-9e43-9185426cd9f6
不存在。
所以它會顯示任務不會消失,但要麼根本沒有被髮送,要麼沒有被放入到redis密鑰中unacked
。
與'正常'任務相同的問題,不是eta或倒計時。工人剛剛死亡,留下了大量的記憶。你有沒有發現是什麼引起了你的? – kev
我離開了芹菜,但我認爲這個問題與使用數據庫作爲人造消息隊列有關。一旦我轉移到redis或rabbitmq,我認爲這個問題已經解決了。 –
你現在只是使用普通redis/rabbitmq?但是你仍然在使用Python? – kev