балансировка коннекций между воркерами

Kostya Alexandrov koticka at mail.ru
Tue Nov 25 16:13:42 MSK 2008


Попробовал отключить.
Нагрузка действиетельно слала распределяться равномерно.

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
>





More information about the nginx-ru mailing list