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

Igor Sysoev is at rambler-co.ru
Tue Nov 25 10:12:10 MSK 2008


On Mon, Nov 24, 2008 at 11:33:16PM +0300, Maxim Dounin wrote:

> Hello!
> 
> On Mon, Nov 24, 2008 at 10:23:16PM +0300, Anton Yuzhaninov 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.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list