У меня есть настройка приложения Django для обслуживания статических файлов через Nginx и восходящий поток, работающий через Gunicorn, для запуска приложения Django с базой данных PSQL, находящейся на выделенном сервере.
Проблема в том, что сайт слишком долго отвечает даже для домашней страницы, которая не требует обращения к базе данных.
Следует отметить одну важную деталь: когда я перезапускаю службу супервизора (которая отвечает за два процесса, один из которых является пушечным рогом, а другой - сельдереем), я получаю быстрые ответы максимум на 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'
Что могло быть причиной такого поведения?
Как упоминалось в комментариях Теро Килканена, оказывается, что проблема была в самом коде.
Я забивал сервер запросами, чтобы добиться некоторого подобия приложения реального времени, и это, в свою очередь, сделало весь сервер недоступным для обслуживания других запросов.
Просмотр статистики сервера не помог прояснить проблему, поскольку все показатели показали, что сервер доступен для работы.
Поэтому, если вы столкнулись с такой проблемой, просмотрите свои журналы Nginx на наличие нескольких запросов за короткий промежуток времени.