Vazamento de memória mod_wsgi?

Vazamento de memória mod_wsgi?

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_wsgiestão vazando. Meu palpite é que seu Djangoaplicativo está vazando. Pessoalmente, nunca encontrei nenhuma evidência de mod_wsgivazamento de memória e executo meia dúzia de mod_wsgiservidores.

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

informação relacionada