Я пытаюсь понять следующий сценарий:
- У меня есть веб-сайт с nginx впереди (обслуживающий с SSL, конфигурация см. Ниже)
- запросы к приложению Django обрабатываются gunicorn (0.18, конфигурация см. ниже, управляется supervisord)
- когда пользователь загружает веб-сайт, 10 запросов обрабатываются gunicorn (остальные - статические файлы, обслуживаемые nginx) - эти запросы не являются долгими запросами
- пулемет настроен на прием максимум 1000 запросов на одного рабочего до тех пор, пока рабочий возрождается
- около 450 человек могут загрузить страницу за короткий промежуток времени (1-2 минуты)
- впоследствии пулемет каким-то образом блокирует и больше не обрабатывает соединения, в результате nginx через некоторое время отвечает
Gateway Timeout
Я полагаю перезагрузки воркеров реально не происходит или механизм заблокирован нагрузкой? Я хочу понять, что происходит, чтобы исправить эту проблему.
Может ли кто-нибудь объяснить, что здесь происходит? Большое спасибо!
PS: я вынужден использовать Gunicorn 18.0, более новая версия в настоящее время недоступна.
Вот конфиги, которые я использую.
nginx:
# nginx
upstream gunicorn_app {
server 127.0.0.1:8100;
}
server {
listen 443 ssl;
...
# skipping static files config
...
location @proxy_gunicorn_app {
proxy_read_timeout 1800;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://gunicorn_app;
}
}
Gunicorn (запускается через супервизора):
# gunicorn
python manage run_gunicorn --workers 4 --max-requests 1000 -b 127.0.0.1:8100 --timeout 1800