Django + Gunicorn API периодически зависает (ошибка 504) — рабочие кажутся бездействующими, но запросы никогда не завершPython

Программы на Python
Anonymous
Django + Gunicorn API периодически зависает (ошибка 504) — рабочие кажутся бездействующими, но запросы никогда не заверш

Сообщение Anonymous »

Я запускаю приложение Django внутри Docker, используя Gunicorn с несколькими рабочими процессами и потоками. В систему также входят PostgreSQL, Redis и несколько рабочих Celery.
Проблема возникает после того, как служба работает непрерывно в течение примерно 4 дней.
Проблема
Примерно через 4 дня безотказной работы:
  • Все запросы API внешнего интерфейса начинают завершаться сбоем по истечении 504 Gateway Timeout
  • Django панель администратора продолжает работать нормально
  • Рабочие процессы Gunicorn все еще работают (без сбоев)
  • Перезапуска контейнера не происходит
  • Загрузка ЦП низкая, а рабочие процессы кажутся бездействующими (, do_select)
  • Запросы никогда не выполняются (ответ не возвращается)
Наблюдения
  • Подключения к базе данных остаются работоспособными:

    в режиме ожидания: 5–7
  • активны: 1
[*]Процессы Gunicorn остаются активными:
  • сбоев рабочих процессов не обнаружено
  • циклов перезапуска нет
[*]Внутренние журналы проверки работоспособности показывают:
  • Код ответа: 000 (ответ HTTP не получен)

Конфигурация Gunicorn

Код: Выделить всё

gunicorn alloy_admin.wsgi:application
--workers 3
--threads 2
--timeout 120
--max-requests 1000
--max-requests-jitter 100
--keep-alive 5
Вопрос
Что может привести к тому, что установка Django + Gunicorn будет работать нормально в течение нескольких дней, а затем постепенно достигнет состояния, в котором все запросы API зависают и в конечном итоге возвращают 504, в то время как рабочие остаются живы и простаивают?
Это обычно вызвано:
  • истощением потоков / насыщением рабочих?
  • Блокировка синхронные вызовы внешнего API внутри представлений?
  • Исчерпание пула соединений (DB/HTTP)?
  • Проблемы с тайм-аутом Nginx/прокси?
  • Или долговременные проблемы с памятью/состоянием в рабочих Gunicorn?
Каков рекомендуемый способ отладки такого рода «отложенного глобального зависания», когда система со временем ухудшается без сбоев?

Вернуться в «Python»