On Fri, 03 Dec 2004 18:07:12 -0500, Ronald Park <[EMAIL PROTECTED]> wrote:
> And, given the problem described about long running request causing
> children to potentially fall off the scoreboard, what happens in the
> following scenario:
> 
> Each of the X servers has 1 or more threads working on loooong requests.
> 
> Other threads in each of those servers finish off M requests, meeting
> (or exceeding?) MaxRequestsPerChild.  (BTW, could you explain which
> thread takes on responsibility for nicely shuting down the process?
> The thread which pushed us past MaxRequestPerChild, the long running
> thread (when it eventually finishes) or some 'master' thread?)

see server/mpm/worker/worker.c; a call to signal_threads() gets
everybody to exit; that can be called in various conditions on
different threads

> Under these circumstances, the X children can't (yet) exit... but
> there's still more requests coming in.  And what happens when the
> listen queue fills up in the parent?

There is no listen queue in the parent.  Incoming connections are
queued only in the kernel before a thread in a child process calls
accept().

In this [basket] case, you have MaxClients child processes, each with
one thread processing an active request; there are no listener threads
since the processes are in the act of exiting and the listener thread
exits in that case, so everything queues up in the kernel until the
kernel accept queue overflows.

This is similar in effect to What happens in the more normal
MaxCLients conditions: Listener threads won't exit, but they will
refuse to accept more connections if there is no thread available to
process the connection, so everything queues up in the kernel until
the kernel accept queue overflows.

This, like other MaxClients conditions, ends when a request ends.

Reply via email to