Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Jun 2002 10:51:01 +0200 (CEST)
From:      Martin Blapp <mb@imp.ch>
To:        "Marc G. Fournier" <scrappy@hub.org>
Cc:        David Greenman-Lawrence <dg@root.com>, "bright@mu.org" <bright@mu.org>, <stable@freebsd.org>
Subject:   Re: Apache + threads under FreeBSD ...
Message-ID:  <20020623104450.J550-100000@levais.imp.ch>
In-Reply-To: <20020623000914.M20796-100000@mail1.hub.org>

next in thread | previous in thread | raw e-mail | index | archive | help

I see something strange here ...

If I ktrace the two existing threads, I see:

  1174 httpd    RET   setuid 0
  1174 httpd    CALL  accept(0xe,0xbfbffb0c,0xbfbffaf4)
  1174 httpd    RET   accept -1 errno 35 Resource temporarily unavailable
  1174 httpd    CALL  poll(0x80c5000,0x1,0)
  1174 httpd    RET   poll 0
  1174 httpd    CALL  poll(0x80c5000,0x2,0xffffffff)

Accept is not happy. If I try to connect, there is no more
output. Something is blocked here.

I see one worker thread, and the master thread.

root    1173  0.0  0.4  5804 3988  ??  Is   10:38AM   0:00.02 httpd
www     1174  0.0  0.4  5804 4024  ??  I    10:38AM   0:00.00 httpd

There are some comments here in the apache CHANGELOG:

  *) Modify the worker MPM to not accept() new connections until
     there is an available worker thread. This prevents queued
     connections from starving for processing time while long-running
     connections were hogging all the available threads.  [Aaron Bannert]

  *) worker MPM: Fix a situation where a child exited without releasing
     the accept mutex.  Depending on the OS and mutex mechanism this
     could result in a hang.  [Jeff Trawick]

  *) Clear the output socket descriptor in unixd_accept() to make sure
     we don't supply a bogus socket to the caller if the accept fails.
     This caused problems with the worker MPM, which tried to process
     the returned socket if it was non-NULL.  [Brian Pane]

  *) Allow modules that add sockets to the ap_listeners list to
     define the function that should be used to accept on that
     socket.  Each MPM can define their own function to use for
     the accept function with the MPM_ACCEPT_FUNC macro.  This
     also abstracts out all of the Unix accept error handling
     logic, which has become out of synch across Unix MPMs.
     [Ryan Bloom]

  *) Win32: Prevent listening sockets from being inherited by
     the Apache child process, CGI scripts, rotatelog process
     etc.  If the Apache child process segfaults, any processes
     that the child started are not reaped. Prior to this fix,
     these processes inherited the listening sockets which sometimes
     prevented the restarted Apache child process from accepting
     connections (ie, the server would hang).
     [Bill Stoddard

I guess this is a bug in apache we need to track down.

Martin

Martin Blapp, <mb@imp.ch> <mbr@FreeBSD.org>
------------------------------------------------------------------
ImproWare AG, UNIXSP & ISP, Zurlindenstrasse 29, 4133 Pratteln, CH
Phone: +41 061 826 93 00: +41 61 826 93 01
PGP: <finger -l mbr@freebsd.org>
PGP Fingerprint: B434 53FC C87C FE7B 0A18 B84C 8686 EF22 D300 551E
------------------------------------------------------------------



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020623104450.J550-100000>