
Eu tenho um aplicativo Django rodando através do mod_wsgi no Apache 2 (Worker) atrás de um proxy reverso Nginx (também servindo conteúdo estático). Quando o aplicativo começa a receber vários acessos simultaneamente, o uso da memória aumentará de <20% para> 96% e todo o aplicativo será interrompido.
Aqui estão minhas configurações do 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
Aqui está a saída do 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
Tentei balancear a carga com um segundo servidor Apache atrás do Nginx, mas isso não pareceu ajudar muito.
O servidor é Ubuntu 10.04 com apache/mod_wsgi/nginx todos instalados a partir dos repositórios do Ubuntu. O aplicativo Django está sendo executado no Django 1.2.
Alguma ideia?
Responder1
Na verdade, tenho minhas dúvidas que mod_wsgi
estão vazando. Meu palpite é que seu Django
aplicativo está vazando. Pessoalmente, nunca encontrei nenhuma evidência de mod_wsgi
vazamento de memória e executo meia dúzia de mod_wsgi
servidores.
Django, entretanto, é uma história diferente. É um projeto enorme e em alguns módulos haverá vazamento de memória. Mas a maioria (todos?) dos problemas conhecidos foram corrigidos no Django 1.1+
.
Então... suponho que algo em seu script esteja vazando. Você está executando algum código específico que possa causar problemas? Que tipo de teste você está executando exatamente? Um teste completo do site com algo como siege
? Ou um teste simples em 1 página com ab
?
Independentemente disso, mostre o código que você está executando e/ou teste se ainda tiver vazamentos de memória com algo tão simples como isto:
def hello_world(request):
return HttpResponse('Hello World!', mimetype='text/plain')