@Sterk
Программист

Почему подвисают веб сервера на линуксе?

Здравствуйте. Провожу тестирование производительности веб серверов на ubuntu server запущенном в virtual box'е. Нагружаю сервера запросами и никак не могу добиться стабильной работы. Время от времени происходят подвисания. Система не встает - нет, наоборот загрузка процессора падает до 0 и сервер просто не обрабатывает запросы. Проходит секунд 5 и сервер в спешном режиме начинает обрабатывать все что накопилось. Это все видно на графике программы, которую я использую для создания нагрузки(LoadUI).
473ff1b19adb4ac0944df3f45307e214.png
Сначала использовал apache2, сейчас провожу тестирование с nginx(виртуалка создана с 0 установкой еще одной копии ubuntu server) - результат тот же, нестабильная работа. В чем может быть проблема?
Виртуальным машинам выдаю 1 ядро(i7) и 1 гигабайт оперативной памяти(вся не используется).

Обновление 1:
В комментарии на первый ответ я пояснил, что "лаги" напрямую зависят от keepalive_timeout у nginx. Не понимаю, что вызывает такие накладные расходы.
Обновление 2:
Обнаружилось что проблема была в программе для тестирования, она плохо реагировала на keep alive. Установил JMeter, он хоть менее дружелюбен к пользователю, но работает стабильнее.
  • Вопрос задан
  • 2754 просмотра
Решения вопроса 1
nazarpc
@nazarpc
Open Source enthusiast
Возможно у вас из-за keep-alive просто исчерпывается лимит активных подключений?
Можете попробовать применить советы из этой статьи: https://stackoverflow.com/questions/410616/increas...
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
Может быть проблема в хосте, на котором виртуалки крутятся? Случайно это не виндовс?
Ответ написан
RicoX
@RicoX
Ушел на http://ru.stackoverflow.com/
Похоже проблема в гипервизоре, попробуйте то-же самое проделать на другом. Так-же интересно что именно происходит в этот момент на самой виртуалке, выводы atop, iotop в этот момент увидеть бы.
Ответ написан
@neol
Предполагаю, что это происходит как-то так:
- клиент посылает HTTP1.1 запрос
- nginx открывает соединение с keep-alive и возвращает ответ
- клиент закрывает соединение
- nginx держит соединение открытым до истечения keepalive_timeout
- когда количество открытых соединений доходит до какого-то значения (можно посчитать с помощью netstat), nginx перестает обрабатывать запросы.

Проверьте значение worker_connections/worker_processes, возможно это они. Ну или что-то из системных лимитов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы