¿Pérdida de memoria mod_wsgi?

¿Pérdida de memoria mod_wsgi?

Tengo una aplicación Django ejecutándose a través de mod_wsgi en Apache 2 (Worker) detrás de un proxy inverso Nginx (que también ofrece contenido estático). Cuando la aplicación comienza a recibir un montón de accesos al mismo tiempo, el uso de la memoria aumentará de <20 % a >96 % y toda la aplicación se detendrá.

Aquí están mis configuraciones de Apache WSGI:

WSGIDaemonProcess djangoboss user=django group=django processes=2 maximum-requests=500 threads=1 python-path=/home/django/django_env/lib/python2.6/site-packages display-name=%{GROUP}
WSGIProcessGroup djangoboss
WSGIScriptAlias / /home/django/django/wsgi/django_wsgi_handler.py

Aquí se muestra la salida de htop:

  PID USER     PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command                                                                                                                                           
29551 django      20   0  793M  745M  6868 R 61.0 42.8  1:28.65 (wsgi:djangoboss)   -k start                                                                                                                        
29550 django      20   0  793M  745M  6868 S  0.0 42.8  0:00.01 (wsgi:djangoboss)   -k start
29549 django      20   0  793M  745M  6868 S  0.0 42.8  0:00.00 (wsgi:djangoboss)   -k start
29548 django      20   0  793M  745M  6868 S  0.0 42.8  0:00.00 (wsgi:djangoboss)   -k start
30778 django      20   0  192M  176M  6356 S  0.0 10.2  0:12.15 /home/django/django_env/bin/python /home/django/django/manage.py post_content
27544 django      20   0 86028 43160  6892 S  0.0  2.4  0:00.01 (wsgi:djangoboss)   -k start
27545 django      20   0 86028 43160  6892 S  0.0  2.4  0:12.92 (wsgi:djangoboss)   -k start
27542 django      20   0 86028 43160  6892 S  0.0  2.4  0:00.00 (wsgi:djangoboss)   -k start
27543 django      20   0 86028 43160  6892 S  0.0  2.4  0:00.00 (wsgi:djangoboss)   -k start

Intenté equilibrar la carga con un segundo servidor Apache detrás de Nginx, pero eso no pareció ayudar mucho.

El servidor es Ubuntu 10.04 con apache/mod_wsgi/nginx, todo instalado desde los repositorios de ubuntu. La aplicación Django se ejecuta en Django 1.2.

¿Algunas ideas?

Respuesta1

De hecho, tengo mis dudas sobre si mod_wsgise está filtrando. Supongo que tu Djangoaplicación tiene una fuga. Personalmente, nunca encontré ninguna evidencia de mod_wsgipérdida de memoria y ejecuto media docena mod_wsgide servidores.

Django sin embargo es una historia diferente. Es un proyecto enorme y en algunos módulos se perderá algo de memoria. Pero la mayoría (¿todos?) de los problemas conocidos se han solucionado en Django 1.1+.

Entonces... supongo que algo en tu guión se está filtrando. ¿Está ejecutando algún código específico que pueda causar problemas? ¿Qué tipo de prueba estás realizando exactamente? ¿Una prueba de sitio completo con algo como siege? ¿O una prueba simple en 1 página con ab?

De todos modos, muestre el código que está ejecutando y/o pruebe si todavía tiene pérdidas de memoria con algo tan simple como esto:

def hello_world(request):
    return HttpResponse('Hello World!', mimetype='text/plain')

información relacionada