Отличия nginx от varnish

Maxim Dounin mdounin at mdounin.ru
Tue Dec 2 18:32:06 MSK 2008


Hello!

On Tue, Dec 02, 2008 at 05:34:41PM +0300, Монашёв Михаил wrote:

> Здравствуйте, Максим.
> 
> > Нет, incqlen - это коннекции которые *не отдаются* приложениию по
> > accept().  Т.е. выгребать - нечего, от скорости приложения ничего 
> > не зависит.
> 
> > Возможное объяснение (если таки accept-фильтры varnish'ем 
> > используются) - что нагрузка на nginx и varnish разная, и 
> > на varnish просто всегда доставляют запросы целиком, а на nginx - 
> > не всегда.
> 
> > Попробуй руками пойти на varnish (telnet ... 80), и ничего не 
> > посылая посмотреть на netstat -Lan - в incqlen должна появиться 1-чка.
> > Если не появилась - значит varnish по каким-то причинам 
> > accept-фильтры не использует.
> 
> 1 не появилась.

Т.е. accept-фильтры varnish'ем не используются, и вся эта длинная дискуссия - 
ни о чём. :)

> тогда странно, что qlen у варниша всегда нулевая.

Ну это совсем другой вопрос, и ни одного вывода netstat'а 
подтверждающего что у nginx'а это не так ты вроде не приводил. :)

Хотя тут как раз вполне подходит объяснение Антона.  Поскольку 
varnish тредовый - задержки на accept() меньше, и шансы увидеть 
ненулевой qlen - малы.  А nginx может блокироваться на диске, и за 
это время в qlen может успеть накопиться.

Я бы ещё добавил что наличие многих процессов у nginx'а ситуацию 
не сильно лечит при использовании accept_mutex'а - ибо worker
пытается получить accept_mutex раз в 500ms по умолчанию (тюнится 
через accept_mutex_delay), и соответственно если не повезёт могут 
быть задержки с accept()'ом вплоть до 500ms даже если есть 
свободные worker'ы.

Maxim Dounin





More information about the nginx-ru mailing list