балансировка коннекций между воркерами
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