
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_wsgi
se está filtrando. Supongo que tu Django
aplicación tiene una fuga. Personalmente, nunca encontré ninguna evidencia de mod_wsgi
pérdida de memoria y ejecuto media docena mod_wsgi
de 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')