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