ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



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



 




Copyright © Lexa Software, 1996-2009.