Ich habe eine Django-Anwendung, die immer wieder ins Speicherleck gerät.
Ich verwende keine großen Daten, die den Speicher überladen könnten, tatsächlich "ißt" die Anwendung inkrementell (in einer Woche geht der Speicher von ~ 70 MB auf 4 GB), deshalb vermute ich, dass dem Garbage Collector etwas fehlt Ich bin mir aber nicht sicher. Außerdem scheint es, dass dieses Inkrement nicht von der Anzahl der Anfragen abhängig ist.
Offensichtliche Dinge wie DEBUG=True
, offene Dateien bleiben, etc ... hier nicht anwendbar.
Ich verwende uWSGI 2.0.3
(+ nginx) und Django 1.4.5
Ich könnte wsgi
so einrichten, dass der Server neu gestartet wird, wenn der Speicher einen bestimmten Grenzwert überschreitet, aber das möchte ich nicht tun, da das wirklich keine Lösung ist.
Gibt es bekannte Situationen, in denen der Müllsammler "nicht richtig funktioniert"? Könnte es einige Codebeispiele bereitstellen?
Gibt es eine Konfiguration von uWSGI + Django, die das verursachen könnte?
Ich habe nicht das genaue Zeug gefunden, nach dem ich suche (jedes Projekt ist eine Welt!), aber nach einigen Hinweisen und Ratschlägen gelang es mir, das Problem zu lösen. Ich teile mit Ihnen ein paar Links, die helfen könnten, wenn Sie ein ähnliches Problem haben.
Django-Speicherlecks, Teil I , django Speicherlecks, Teil II , Suchen und Beheben von Speicherlecks in Python , Optimiertes Skript für nginx und uwsgi auf ubuntu 12.04 (dies ist für WEB2PY, gibt aber einige 'Krücken' über uWSGI) und Debugging von Speicherlecks in einer WSGI-Anwendung .
Einige nützliche SO Antworten / Fragen: Welcher Python-Speicherprofiler wird empfohlen? , Gibt es einen Arbeitsspeicherprofiler für Python3 , Python-Speicherlecks und Python: Memory Leck-Debugging
Tags und Links python django memory-leaks uwsgi