У меня есть приложение Django, настроенное для обслуживания статических файлов через Nginx, и апстрим, работающий через Gunicorn, для запуска приложения Django с базой данных PSQL, размещенной на выделенном сервере.
Проблема в том, что сайт слишком долго отвечает даже на домашнюю страницу, которая не требует обращения к базе данных.
Важно отметить одну важную деталь: когда я перезапускаю службу супервизора (которая отвечает за два процесса, один из которых — gunicorn, а другой — celery), я получаю быстрые ответы максимум на 3 запроса.
После этих 3 запросов приложение снова перестает отвечать.
Что касается конфигурации, Nginx настроен на тайм-ауты (все 3: подключение, чтение и отправка), установленные на 300.
Gunicorn имеет такой же тайм-аут и настроен на работу 3 рабочих процессов.
Приложение работает на VPS с одним ЦП и 1 ГБ памяти.
Ниже представлен выводiostatдля базовой статистики.
avg-cpu: %user %nice %system %iowait %steal %idle
1.49 0.00 0.44 0.03 3.21 94.83
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
xvda 0.74 3.23 12.79 1023355 4054257'
Что может быть причиной такого поведения?
решение1
Как отметил в комментариях Теро Килканен, проблема, как оказалось, заключалась в самом коде.
Я забивал сервер запросами, чтобы добиться некоего подобия приложения в реальном времени, и это в свою очередь сделало весь сервер недоступным для обслуживания других запросов.
Просмотр статистики сервера не помог прояснить проблему, поскольку все показатели показывали, что сервер доступен для работы.
Поэтому, если вы столкнулись с такой проблемой, просмотрите логи Nginx на предмет наличия нескольких запросов за короткий промежуток времени.