On 26/10/11 14:56, Max Barry wrote:
> I'm trying to solve a long-running problem whereby my Apache mod_perl
> processes get stuck in a "FUTEX_WAIT" state instead of exiting.
> 
> I believe this is the same issue as reported here:
> http://www.gossamer-threads.com/lists/modperl/modperl/99879
> 
> The problem occurs fairly frequently following a burst of traffic, when
> Apache spawns new processes, then attempts to cull them afterward. It
> also occurred, before I disabled this, when Apache tried to cull a
> process upon reaching MaxRequestsPerChild.

Further to this, I've found that the problem occurs even on a fresh
Apache/mod_perl install; i.e. after completely removing Apache &
mod_perl, including /etc/apache2/, and doing only this:

  1. sudo apt-get install apache2-mpm-worker libapache2-mod-perl2
apache2-doc

  2. Edit the 'default' site thusly:

--- /etc/apache2/sites-available/default.original       2011-10-27
08:44:11.383803928 +1100
+++ /etc/apache2/sites-available/default        2011-10-27 08:44:51.795391116 
+1100
@@ -19,6 +19,9 @@
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
+
+               SetHandler perl-script
+               PerlResponseHandler ModPerl::RegistryBB
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

  3. Add a low 'MaxRequestsPerChild' directive (not strictly necessary,
but makes the problem much more visible):

--- /etc/apache2/httpd.conf.original    2011-10-27 08:52:48.898361041 +1100
+++ /etc/apache2/httpd.conf     2011-10-27 08:58:52.384091605 +1100
@@ -0,0 +1 @@
+MaxRequestsPerChild   10

  4. sudo /etc/init.d/apache2 restart

  5. ab -n 450 -c 175 http://localhost/cgi-bin/

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
apr_poll: The timeout specified has expired (70007)
Total of 426 requests completed

(The number "426" above varies: sometimes it's as low as 400, sometimes
all requests complete. Usually, though, it's around 430.)

I've also established that:

* The problem occurs regardless of whether ModPerl::Registry,
ModPerl::RegistryBB, or ModPerl::PerlRun is used.

* The problem occurs even when all Apache modules are disabled except
for alias, authz_host, and mod_perl.

* The problem occurs even when no script is being run: i.e. Apache is
asked for "/cgi-bin/nonexistentscript.cgi", or just "/cgi-bin/".

This is pretty perplexing.

Max.

Reply via email to