Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: балансировка конн екций между воркерами
Попробовал отключить.
Нагрузка действиетельно слала распределяться равномерно.
4 ядра (2 по 2), 6 воркеров, до этого обычно в топе висели 3, иногда
"подскакивал" 4.
Сейчас все 6. Нагрузка на камни выросла не сильно, примерно на 2%,
уменьшился CS.
Соединений около 8 тысяч. Респонз системы стал сильно лучше.
Имхо сделал бы обязательным для конфигурирования параметром.
Anton Yuzhaninov wrote:
On 25.11.2008 10:12, Igor Sysoev wrote:
А как балансируются приходящие коннекции между несколькими воркерами?
[...]
Т. е. все 50k коннекций на одном воркере, а второй отдыхает.
Из особенностей конфига - наличие директивы limit_rate
Если убрать limit_rate то начинают работать оба воркера.
По умолчанию nginx работает с использованием accept_mutex'а, и при
малой нагрузке большая часть работы будет на одном worker'е.
Если хочется лучшей балансировки соединений между рабочими
процессами - можно попробовать выключить accept_mutex:
events {
accept_mutex off;
...
}
Однако в результате использование CPU несколько вырастет, т.к. для
принятия соединения будут пробуждаться все рабочие процессы, при том
что accept() сможет сделать только один из них.
Я думаю, рост загрузки CPU при небольшом числе воркеров будет незаметен.
Вообще, accept mutex появился в Апаче лет десять назад, когда процессоры
и шедулеры были медленнее, а процессов - много. Называлось это
thundering
herd problem. Наверное, имеет смысл его по дефолту выключать везде,
кроме rtsig.
IMHO не стоит отключать accept mutex.
Неравномерное распределение коннекций по воркерам под "живой"
нагрузкой не наблюдается, только при синтетическом stress-test
|