【问题标题】:Restart celery beat and worker during Django deployment在 Django 部署期间重启 celery beat 和 worker
【发布时间】:2018-07-09 22:50:18
【问题描述】:

我正在使用celery==4.1.0django-celery-beat==1.1.0

我正在用 Django 运行 gunicorn + celery + rabbitmq。

这是我创建节拍和工人的配置

celery -A myproject beat -l info -f /var/log/celery/celery.log --detach
celery -A myproject worker -l info -f /var/log/celery/celery.log --detach

在 Django 部署期间,我正在执行以下操作:

rm -f celerybeat.pid
rm -f celeryd.pid
celery -A myproject beat -l info -f /var/log/celery/celery.log --detach
celery -A myproject worker -l info -f /var/log/celery/celery.log --detach
service nginx restart
service gunicorn stop
sleep 1
service gunicorn start

我想重新启动 celery beat 和 worker,看来这个逻辑是可行的。但我注意到 celery 在部署期间开始使用越来越多的内存,并且在多次部署后我达到了 100% 的内存使用率。我尝试了不同的服务器设置,但似乎不相关。

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    rabbitmq 可能是高内存使用的罪魁祸首。你能安全重启rabbit吗?

    您还可以确认重启后有预期数量的工人吗?

    【讨论】:

      【解决方案2】:

      您为每次部署启动 2 个新工作人员,而不会停止/杀死以前的工作人员。

      在部署期间,使用

      停止现有工作人员
      kill -9 $PID
      kill -9 `cat /var/run/myProcess.pid`
      

      或者,你可以杀死所有的工人

      pkill -9 celery
      

      现在您可以像往常一样启动工作人员了。

      celery -A myproject beat -l info -f /var/log/celery/celery.log --detach
      celery -A myproject worker -l info -f /var/log/celery/celery.log --detach
      

      【讨论】:

      • 使用kill -9 的建议充其量是可疑的。套用 Randal L. Schwartz 的话说,如果没有 -9 进程真的不会死掉,那么它是有问题的,应该从您的系统中删除;如果你知道自己在做什么,就不要使用-9,除非你真的必须这样做。
      猜你喜欢
      • 2020-08-11
      • 2021-12-01
      • 2019-05-02
      • 2019-11-15
      • 2016-09-20
      • 1970-01-01
      • 2014-10-18
      • 1970-01-01
      • 2022-11-23
      相关资源
      最近更新 更多