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

Anton Yuzhaninov citrin at citrin.ru
Tue Nov 25 15:58:49 MSK 2008


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

-- 
  Anton Yuzhaninov





More information about the nginx-ru mailing list