Speicherleck bei mod_wsgi?

Speicherleck bei mod_wsgi?

Ich habe eine Django-App, die über mod_wsgi auf Apache 2 (Worker) hinter einem Nginx-Reverse-Proxy läuft (der auch statische Inhalte bereitstellt). Wenn die App viele Zugriffe gleichzeitig erhält, steigt die Speichernutzung von <20 % auf >96 % und die gesamte Anwendung kommt zum Stillstand.

Hier sind meine Apache WSGI-Konfigurationen:

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

Hier ist die Ausgabe von 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

Ich habe versucht, die Last mit einem zweiten Apache-Server hinter Nginx auszugleichen, aber das hat anscheinend nicht viel geholfen.

Der Server ist Ubuntu 10.04 mit Apache/mod_wsgi/nginx, alles aus den Ubuntu-Repos installiert. Die Django-App läuft auf Django 1.2.

Irgendwelche Ideen?

Antwort1

Ich habe tatsächlich meine Zweifel, dass mod_wsgies ein Speicherleck gibt. Ich vermute, dass Ihre DjangoApp ein Speicherleck hat. Ich persönlich habe noch nie Hinweise auf mod_wsgiSpeicherlecks gefunden und ich betreibe ein halbes Dutzend mod_wsgiServer.

Bei Django ist die Lage jedoch anders. Es ist ein riesiges Projekt und in einigen Modulen kommt es zu Speicherverlusten. Die meisten (alle?) der bekannten Probleme wurden jedoch behoben Django 1.1+.

Also... ich vermute, dass etwas in Ihrem Skript undicht ist. Führen Sie einen bestimmten Code aus, der Probleme verursachen könnte? Welche Art von Test führen Sie genau aus? Einen vollständigen Site-Test mit etwas wie siege? Oder einen einfachen Test auf einer Seite mit ab?

Zeigen Sie ungeachtet dessen den Code, den Sie ausführen, und/oder testen Sie mit etwas so Einfachem wie Folgendem, ob weiterhin Speicherlecks auftreten:

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

verwandte Informationen