Заморозка задачи Celery + django + supervisor + redis
У меня есть приложение Django, обслуживаемое Gunicorn с Celery, использующим celery-beat, которое запускается Supervisord
Задача Сельдерея иногда зависает (может быть раз в неделю)
Версии программного обеспечения:
Redis server v=4.0.9
celery 5.1.2
django 3.2
django-celery-beat 2.2.1
Я размещаю файлы конфигурации здесь https://gist.github.com/SergSm/43a1554b57968c5e35776ad55fdcf0ab
Что я делаю
Каждый раз, когда задача замерзает, я запускаю celery -A app inspect active
, чтобы увидеть id замерзшей задачи
затем я запускаю python manage.py shell
в моей директории django, чтобы увидеть состояние запущенной задачи
>>> from app.celery import app
>>> from celery.result import AsyncResult
>>> result = AsyncResult(id='9bf01312-c2ff-4b1e-9fd5-6fa6b0c458f2', app=app)
>>> result.state
'PENDING'
задание находится в стадии выполнения и не может быть завершено даже путем выполнения
sudo supervisorctl stop latest_conf_celery
поэтому я должен убить -9 все процессы Celery
У меня есть подозрение, что причина может быть в имени рабочего, порожденного gunicorn.
Я сделал этот вывод из-за того, что когда я выполняю ps -aux | grep celery
.
я вижу:
serg 8641 0.2 8.4 262284 84948 ? Sl 10:09 0:05 /home/serg/.cache/pypoetry/virtualenvs/latest-config-1c-lST7exov-py3.9/bin/python /home/serg/.cache/pypoetry/virtualenvs/latest-config-1c-lST7exov-py3.9/bin/celery -A app worker -P threads --beat -S django.schedule -l INFO
serg 8643 0.0 7.6 185800 76804 ? S 10:09 0:01 /home/serg/.cache/pypoetry/virtualenvs/latest-config-1c-lST7exov-py3.9/bin/python /home/serg/.cache/pypoetry/virtualenvs/latest-config-1c-lST7exov-py3.9/bin/celery -A app worker -P threads --beat -S django.schedule -l INFO
Возможно, эти процессы имеют какой-то конфликт.
Мое другое предположение, что существует какой-то конфликт ввода-вывода, когда один процесс блокирует сокет или файл журнала.
Файлы журналов Celery не дают никакой информации об этом
Итак, вопрос в следующем: как я могу отладить эти замораживания Celery?