Я вижу среднее время загрузки load average: 12.41, 11.94, 11.59
на машине под управлением Linux, обслуживающей веб-приложение. У него 16 ядер, поэтому средняя нагрузка не слишком высока.
Однако это веб-приложение часто отключается, когда я пытаюсь подключиться к нему в данный момент. Что может быть причиной этого? Это немного круто.
Загрузка ЦП колеблется в районе ~ 50% для всех ЦП (согласно top
). Ценности для wa
находятся между 0.0
и 3.0
. Память подкачки вообще не используется, и есть тонна свободной памяти.
iostat
показывает %iowait
значение 0.51
. Другая статистика:
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 4.88 1.02 2136.25 12365497 25895371840
sdb 0.00 0.00 0.00 9456 0
sdc 0.95 0.00 452.44 4781 5484405440
Количество операций записи в секунду велико - это приложение с тяжелыми операциями записи. iotop
показывает записи, исходящие от pgbouncer
процесс (пул соединений postgresql), из очередей асинхронных задач и из рабочих процессов nginx (возможно, запись в журнал доступа). Я не вижу ничего выше 6% в IO>
столбец - и большинство строк имеют 0,00%. SWAPIN
является 0.00%
на протяжении.
Короче говоря, загрузка ЦП не зашкаливает, использование памяти не является проблемой, и нет никаких признаков чрезмерного ожидания, связанного с вводом-выводом. Почему веб-приложение будет бесконечно загружаться / отключаться, когда я пытаюсь получить к нему доступ? Может быть проблема в sysctl.conf
или с моим веб-сервером? Здесь нужно экспертное мнение.
Речь идет о сервере Ubuntu 14.04 LTS. Nginx - это веб-сервер, используемый в качестве обратного прокси-сервера с Gunicorn (веб-приложением на основе Django). Серверная часть - это Postgresql 9.3, и Redis тоже в игре. БД находится в отдельной виртуальной машине.
Если вы работаете с большим объемом TCP-соединений и используете обратный прокси, например nginx, вы можете столкнуться с Исчерпание порта TCP. Короче, есть теоретически 65535 портов TCP. Если у вас есть один обратный прокси-сервер, поступающий с IP 192.168.1.1, подключающийся к вашему веб-серверу через порт 80 по адресу 192.168.1.2:80, вы можете сделать теоретическое максимальное количество одновременных подключений через обратный прокси-сервер 65535 к порту 80 в вашей сети. сервер. После этого у вас заканчиваются исходные порты (известные как временные порты) для использования.
Но это немного сложнее: Linux по умолчанию настроен на использование только около 30000 (меньше для старых ядер / дистрибутивов - всего 1024) этих портов, и даже тогда он использует алгоритм, который будет случайным образом пытаться найти бесплатный исходный порт для использования. Чем ближе вы подходите к отметке 30000, тем больше попыток ядро делает для случайного выбора свободного порта и тем больше времени уходит на его поиск. Попробуйте использовать netstat, grep и wc чтобы подсчитать количество подключений, которые у вас есть, и если вы приближаетесь к 30 000, это, вероятно, причина ваших таймаутов. Ты можешь просмотрите предложения NGINX по решению этой проблемы, если это так.