It looks like you are running a single process with 50 threads, I think you
should use more processes with less threads something like this:

WSGIDaemonProcess site-1 user=django group=django processes=5 threads=10
maximum-requests=1000
WSGIProcessGroup site-1
WSGIScriptAlias / /somepath/django.wsgi /somepath/django.wsgi

The 'maximum-requests=1000' will kill each thread after a 1000 requests and
create a new one, this helps to keep memory leaks to a minimum.

~Carl

On Thu, Apr 14, 2011 at 3:18 PM, Chase <[email protected]> wrote:

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


-- 
-------------------------------------------------------------------------------
Carl J. Nobile (Software Engineer)
[email protected]
-------------------------------------------------------------------------------

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