worker_processes

Gena Makhomed gmm на csdoc.com
Пн Авг 1 18:24:00 UTC 2011


Здравствуйте!

сейчас директива worker_processes
имеет значение-по-умолчанию равное 1.

при этом - в nginx существует
параметр командной строки -g

# -g — задаёт глобальные директивы конфигурации, например,

nginx -g "pid /var/run/nginx.pid; worker_processes `sysctl -n hw.ncpu`;"

предлагаю:

1. добавить в nginx r/o переменную $sysctl_cpu_cores_physical
в которой будет записано число физических ядер процессора
если это не Linux и не FreeBSD и не какая-то другая система,
где nginx может определить число ядер процессора в run-time,
то как и раньше, эта переменная будет равна fail-safe значению 1
и возможно имеет смысл при старте выводить предупреждение, что 
используется дефолтовое fail-safe значение 1, потому что в run-time
не удалось узнать количество ядер. - кого это достанет - или поставят
в конфиге нужное значение вручную, или пришлют патч для своей системы.

2. для директивы worker_processes значением по-умолчанию установить
$sysctl_cpu_cores_physical для всех систем, где nginx может определить
количество ядер процессора, кроме windows,
где worker_processes должно быть равно 1.

это позволит получить nginx "из коробки" более готовый к применению
и автоматически настроенный на "оптимальную производительность" по
количеству worker-процессов. особенно это актуально в случае https
протокола, когда пользователи пытаются проводить какие-то тестирования
и выкладывать в сеть их результаты сравнивая nginx с другими серверами.

http://news.netcraft.com/archives/2011/07/08/july-2011-web-server-survey.html

	June 2011	Percent	July 2011	Percent	Change
nginx	22,668,760	6.55%	23,357,497	6.54%	-0.01

вряд ли все из этих 22-23 миллионов пользователей nginx
будут внимательно читать всю документацию, перед тем,
как пытаться его использовать в production.

а кому из них нужна будет "тонкая настройка" и не устроит дефолтовое
значение - всегда смогут в конфиге явно указать необходимое значение.

P.S. возможно также имеет в nginx смысл добавить r/o переменную
$sysctl_cpu_cores - это будет общее количество ядер процессора,
включая и "виртуальные" на системах с процессором intel и т.п.
и $sysctl_cpu_cores_virtual - количество только "виртуальных" ядер.
- возможно кто-то захочет использовать эти переменные для настройки.

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru