Re: nginx VS apache: Количество одновременных TCP соединений
Lex Lyamin
flx at namesys.com
Wed Aug 23 15:12:20 MSD 2006
On 8/23/06, Igor Sysoev <is at rambler-co.ru> wrote:
> Возможно, дело в том, что Апач выдаёт не просто
> Keep-alive: timeout=15, max=5
> Keep-alive: timeout=15, max=5
> Keep-alive: timeout=15, max=5
> Keep-alive: timeout=15, max=5
>
> а
>
> Keep-alive: timeout=15, max=5
> Keep-alive: timeout=15, max=4
> Keep-alive: timeout=15, max=3
> Keep-alive: timeout=15, max=2
> Connection: close
>
> и закрывает соединение после пятого запроса, поэтому бразуер открывает
> новое.
> nginx же не ограничивает число запросов по keep-alive соединению, поэтому
> всё идёт через изначальные три.
>
>
данное утверждение верно. именно так и ведет себя апач.
утверждение про nodelay так-же верно.
apache/srclib/apr/network_io/unix/sockopt.c
------------------------------------------------------------------
static apr_status_t sononblock(int sd)
{
#ifndef BEOS
int fd_flags;
fd_flags = fcntl(sd, F_GETFL, 0);
#if defined(O_NONBLOCK)
fd_flags |= O_NONBLOCK;
#elif defined(O_NDELAY)
fd_flags |= O_NDELAY;
#elif defined(FNDELAY)
fd_flags |= FNDELAY;
#else
#error Please teach APR how to make sockets non-blocking on your platform.
#endif
if (fcntl(sd, F_SETFL, fd_flags) == -1) {
return errno;
}
#else
int on = 1;
if (setsockopt(sd, SOL_SOCKET, SO_NONBLOCK, &on, sizeof(int)) < 0)
return errno;
#endif /* BEOS */
return APR_SUCCESS;
}
----------------------------------------------------
Итого: есть вполне хорошее и логичное обьяснение сложившейся ситуации.
По тестам, время на открытие все той-же странички получается ~0.59s, что
как минимум не хуже чем у апача, при гораздо более приятной
масштабируемости.
Игорь, а может быть имеет смысл по умолчанию tcp_nodelay on ?
--
liberation loophole will make it clear
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20060823/de83a3a9/attachment.html>
More information about the nginx-ru
mailing list