Re: Почему нагружается только 1 worker?
Maxim Dounin
mdounin at mdounin.ru
Mon Jun 2 15:40:25 UTC 2014
Hello!
On Mon, Jun 02, 2014 at 03:32:06AM -0400, Brazzford wrote:
> Здравствуйте! У меня VPS с одно ядерным процессором. В конфиге Nginx
> поставлено 2 worker'а. Когда я делаю тест с помощью AB, вижу, что всю
> нагрузку принимает либо первый либо второй worker. Именно поэтому
> рекомендуют запускать количество worker'ов равных числу ядер? Потому что
> остальные задействованы не будут? А почему два worker'a не могут
> распределить нагрузку между собой, работая на одном ядре процессора? Я знаю,
> что одно ядро, в одно и тоже время может выполнять только один процесс, но
> ведь существует переключатель процессов, который с одного процесса
> переключается на другой... и я не могу понять почему у меня нагружается
> только один worker. Помогите пожалуйста понять суть дела.
По умолчанию nginx старается работать так, чтобы "пробуждалось"
минимальное количество рабочих процессов - это позволяет экономить
затраты на переключение контекстов и "лишние" пробуждения
процессов. При реальной работе - в результате используется
столько процессов, сколько на самом деле нужно для обработки той
нагрузки, которая есть.
Если хочется получить более ровное распределение в тестах - то
имеет смысл:
- accept_mutex выключить;
- multi_accept, если вдруг включён, выключить;
- убедиться, что тесты не используют постоянные соединения и/или
количество устанавливаемых соединений так или иначе велико.
Ссылки:
http://nginx.org/r/accept_mutex/ru
http://nginx.org/r/multi_accept/ru
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru