Kennen Sie eine effiziente Möglichkeit, die Speichernutzung einer Django-App pro Anfrage zu protokollieren?So protokollieren Sie die Speicherauslastung einer Django-App pro Anfrage
Ich habe einen Apache/Mod_wsgi/Django-Stack, der normalerweise gut läuft, aber manchmal endet ein Prozess eine riesige Menge an Speicher. Die Server haben wenig Speicher, sie tauschen viel aus und die Dienste werden drastisch verlangsamt.
Diese Situation ist ziemlich schwer zu beheben, weil ich nicht weiß, welche Anfrage für dieses Verhalten verantwortlich gemacht werden soll, ich kann es nicht reproduzieren.
Ich möchte etwas in der Produktion bereitgestellt haben, die die Speicherauslastung des Prozesses vor und nach jeder Anfrage mit minimalem Overhead protokolliert.
Bevor ich das Rad neu zu erfinden starten, tun die Gemeinde meiner Kollegen djangoists kennt jede bestehende Lösung dieses Problem zu lösen? Hinweise, Middleware, Snippet oder vielleicht Apache Log-Konfiguration geschätzt.
Was (glaube ich) Ich brauche nicht ist:
- eine Reihe von Entwickler-Stufe Profilierung/Debugging-Tool, ich weiß, einige von ihnen bereits und ich würde sie benutzen, wenn ich weiß, was zum Profil/debuggen, es sieht ein bisschen zu viel aus, um für immer in der Produktion laufende Dienste zu überwachen. Obendrein wird normalerweise ein Mem-Verwendungs-Bericht des Code-Shred in Stücke angezeigt. Es wäre wirklich hilfreich, die fehlerhafte Anfrage genau zu lokalisieren.
- generische Ratschläge zur Optimierung der Speicherbelegung einer Django App, gut, es ist immer gut zu lesen, aber die Idee hier ist eher «wie Anfragen effizient zu verfolgen, die optimiert werden müssen».
Meine engsten Suchergebnisse:
- Django/WSGI - How to profile partial request? My profiling tools are per-request but app runs out of memory before then
- Django memory usage going up with every request
- Average php memory usage per request?
Vielleicht hilft diese modwsgi Option 'Maximum-Anfragen = nnn'. "Definiert ein Limit für die Anzahl der Anforderungen, die ein Daemon-Prozess verarbeiten soll, bevor er heruntergefahren und neu gestartet wird." – freestyler
@freestyler: yep, ich benutze das schon, aber es vermisst den Punkt irgendwie. Die Idee besteht darin, fehlerhafte Anfragen zu beleuchten, um sie tatsächlich zu reparieren, um das System nicht periodisch zu bereinigen (was auch nützlich sein könnte). Außerdem könnte eine speicherverbrauchende Anfrage früh nach einem Neustart erscheinen, hier keine Korrelation. – ddelemeny