I have a custom Django app that's becoming unresponsive
intermittently. About once every couple of days between three servers,
serving about 10,000 requests a day. When it happens, it never
recovers. I can leave it there for hours, and it will not server any
more requests.


In the apache logs, I see see the following:

Apr 13 11:45:07 www3 apache2[27590]: **successful view render here**
...
Apr 13 11:47:11 www3 apache2[24032]: [error] server is within
MinSpareThreads of MaxClients, consider raising the MaxClients setting
Apr 13 11:47:43 www3 apache2[24032]: [error] server reached MaxClients
setting, consider raising the MaxClients setting
...
Apr 13 11:50:34 www3 apache2[27617]: [error] [client 10.177.0.204]
Script timed out before returning headers: django.wsgi
(repeated 100 times, exactly)


I am running:

apache version 2.2, using the worker MPM
wsgi version 2.8
SELinux NOT installed
lxml package being used, infrequently
Ubuntu 10.04


apache config:

WSGIDaemonProcess site-1 user=django group=django threads=50
WSGIProcessGroup site-1
WSGIScriptAlias / /somepath/django.wsgi /somepath/django.wsgi


wsgi config:

import os, sys
sys.path.append('/home/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()


When this happens, I can kill the wsgi process and the server will
recover.

>ps aux|grep django # process is running as user "django"
django   27590  5.3 17.4 908024 178760 ?       Sl   Apr12  76:09 /usr/
sbin/apache2 -k start
>kill -9 27590


This leads me to believe that the problem is a known issue:

"(deadlock-timeout) Defines the maximum number of seconds allowed to
pass before the daemon process is shutdown and restarted after a
potential deadlock on the Python GIL has been detected. The default is
300 seconds. This option exists to combat the problem of a daemon
process freezing as the result of a rouge Python C extension module
which doesn't properly release the Python GIL when entering into a
blocking or long running operation."


However, I'm not sure why this condition is not clearing
automatically. I do see that the script timeout occurs exactly 5
minutes after the last successful page render, so the deadlock-timeout
is getting triggered. But it does not actually kill the process.

I'm thinking of switching to MPM/prefork, but I'm not sure if that
should have any effect, given that I'm in daemon mode already.

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/modwsgi?hl=en.

Reply via email to