May 02, 2009 01:33PM
On Sat, May 02, 2009 at 09:18:51PM +0400, Igor Sysoev wrote:

> On Sat, May 02, 2009 at 06:50:25PM +0200, Chris Wan wrote:
>
> > Igor Sysoev wrote:
> > > On Sat, May 02, 2009 at 04:57:36PM +0200, Chris Wan wrote:
> > >
> > >>
> > >> I run 0.7.54 nginx/windows, but I found the nginx don't work at all when
> > >> I set "worker_processes 4".
> > >>
> > >> command "telnet 127.0.0.1 80" is ok, but IE can't open
> > >> "http://127.0.0.1", it wait untill time expired. and no error in
> > >> error.log.
> > >
> > > Try
> > >
> > > events {
> > > accept_mutex off;
> > > }
> > >
> > > In my tests only one process receives select() notifcaitons about new
> > > connections.
> > thx, It work.
> >
> > I want to know more information about this directives.
> >
> > nginx wiki:
> > accept_mutex
> > Syntax: accept_mutex [ on | off ]
> > Default: on
> > nginx uses accept mutex to serialize accept() syscalls.
> >
> >
> > I notice you used to say:
> > Workers try to hold accept_mutex which
> > allows only one worker to get new connections notification and to call
> > accept(). You can switch accept_mutex off, then all scheduling will be
> > done by OS scheduler via accept() call. "
> >
> > but apache said:
> > /* On some architectures it's safe to do unserialized accept()s in the
> > single
> > * Listen case. But it's never safe to do it in the case where there's
> > * multiple Listen statements. Define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
> > * when it's safe in the single Listen case.
> > */
>
> If Listen is single Apache workers just call blocking accept().
> If Listen are several worker can not just call blocking accept() on one
> listening socket. It calls select() for all listening sockets instead,
> and then calls accept() for returned socket.
>
> nginx workers always use select/kqueue/epoll/etc. before accept().
>
> OS may wake all processes waiting on accept() and select(), this is called
> http://en.wikipedia.org/wiki/Thundering_herd_problem
> This is a problem if you have a lot of workers as in Apache (hundreds
> and more), but this insensible if you have just several workers as nginx
> usually has. Therefore turning accept_mutex off is as scheduling incoming
> connection by OS via select/kqueue/epoll/etc (but not accept().

Also, unless I am mistaken Apache2/Windows uses IOCP at least on NT.


--
Igor Sysoev
http://sysoev.ru/en/
Subject Author Posted

nginx-0.7.54

Igor Sysoev May 01, 2009 03:02PM

Re: nginx-0.7.54

Jérôme Loyet May 02, 2009 12:22AM

Re: nginx-0.7.54

Chris Wan May 02, 2009 10:57AM

Re: nginx-0.7.54

Igor Sysoev May 02, 2009 11:52AM

Re: nginx-0.7.54

Chris Wan May 02, 2009 12:50PM

Re: nginx-0.7.54

Igor Sysoev May 02, 2009 01:18PM

Re: nginx-0.7.54

Igor Sysoev May 02, 2009 01:33PM

Re: nginx-0.7.54

Weibin Yao May 04, 2009 02:32AM

Re: nginx-0.7.54

Igor Sysoev May 04, 2009 03:19AM

RE: nginx-0.7.54

郭振立 May 04, 2009 10:31AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 240
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready