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?
Каков рекомендуемый способ отладки такого рода «отложенного глобального зависания», когда система со временем ухудшается без сбоев?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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