May 02, 2009 01:18PM
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().


--
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