我的程序每天运行特定的任务,这些任务由django-celebeat设置。最近,我注意到这些任务没有执行,所有更改都是通过重置supervisorctl配置的celeb服务来完成的。
command=/opt/taskjo/taskjo-venv/bin/celery -A taskjo worker --pool=gevent --autoscale 4,2 -B -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler --loglevel=INFO
我添加了这些项目
--pool=gevent --autoscale 4,2
日志中的新错误
Traceback (most recent call last):
File "/home/ubuntu/venv/lib/python3.5/site-packages/billiard/pool.py", line 1224, in mark_as_worker_lost
human_status(exitcode)),
billiard.exceptions.WorkerLostError: Worker exited prematurely: exitcode 0.
最近,我在一个有6个RAM的服务器上运行了4个odoo服务,大量RAM被占用。
发生了什么:Celery发送了几个任务,但它无法完成,当它被重置时,所有任务都完成了。
你有解决方案吗?
WorkerLostError:Worker过早退出:关闭Worker#273 时退出代码0
WorkerLostError:Worker过早退出:信号15(SIGTERM(#6291
问题已经解决工作步骤:
- 检查服务器的RAM(它几乎已满98%(
- 芹菜配置(由于工作人员的数量,大约有1GB的RAM被占用(
- 关闭多个服务并更改Celery的配置
因此,它已经工作了好几天没有问题。
以下配置已被替换:
[program:celery]
directory=/opt/taskjo/taskjo
command=/opt/taskjo/taskjo-venv/bin/celery -A taskjo worker -B -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler --loglevel=INFO
;user=taskjo
;numprocs=1
stdout_logfile=/opt/taskjo/logs/celery/worker-access.log
stderr_logfile=/opt/taskjo/logs/celery/worker-error.log
stdout_logfile_maxbytes=50
stderr_logfile_maxbytes=50
stdout_logfile_backups=10
stderr_logfile_backups=10
autostart=true
autorestart=true
startsecs=10
; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600
; Causes supervisor to send the termination signal (SIGTERM) to the whole process group.
stopasgroup=true
; Set Celery priority higher than default (999)
; so, if rabbitmq is supervised, it will start first.
priority=1000