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

Anton Yuzhaninov citrin at citrin.ru
Mon Nov 24 23:45:48 MSK 2008


On 24.11.2008 22:45, Igor Sysoev wrote:
> On Mon, Nov 24, 2008 at 10:23:16PM +0300, Anton Yuzhaninov wrote:
> 
>> А как балансируются приходящие коннекции между несколькими воркерами?
>>
>> $ uname -srp
>> FreeBSD 7.1-PRERELEASE amd64
>>
>> $ nginx -v
>> nginx version: nginx/0.7.22
>>
>> $ ps ax -o pid,ppid,%cpu,vsz,wchan,command|egrep '(nginx|PID)'
>>   PID  PPID %CPU   VSZ WCHAN  COMMAND
>>  6345     1  0.0  6824 pause  nginx: master process /usr/local/sbin/nginx
>>  6346  6345  0.0 420520 kqread nginx: worker process (nginx)
>>  6347  6345  0.0 44712 kqread nginx: worker process (nginx)
>>
>> $ fstat | grep 'nginx.*tcp' | awk '{print $3}' | sort | uniq -c
>>    2 6345
>> 50002 6346
>>    2 6347
>>
>> Т. е. все 50k коннекций на одном воркере, а второй отдыхает.
>>
>> Из особенностей конфига - наличие директивы  limit_rate
>>
>> Если убрать  limit_rate то начинают работать оба воркера.
> 
> По идее, limit_rate не должен на это влиять.
> Попробуй
> 
> events {
>    accept_mutex  off;
> }
> 
> 

С accept_mutex  off работают оба воркера:

fstat | grep 'nginx.*tcp' | awk '{print $3}' | sort | uniq -c
    2 677
12670 843
37334 844

С дефолтным значением accept_mutex - происходит так:
запускаю stress test на одном хосте - все его запросы приходят на один воркер.
На втором 0 коннекций. Потом запускаю тест на другом хосте - большая часть его коннекций попадает
уже на второй воркер.

C accept_mutex off чтобы нагрузить оба воркера достаточно одного запуска теста на одном хосте.

-- 
  Anton Yuzhaninov





More information about the nginx-ru mailing list