/ / Django Anfrage unglaublich langsam, kann nicht finden warum - Django, Leistung, CPU-Nutzung

Django Anfrage unmöglich langsam, kann nicht finden, warum - Django, Leistung, CPU-Nutzung

Ich habe ein Apache2 + mod_python-Setup, das reagiert unmöglich langsam seit einigen Tagen - zwei Sekunden Prozessorzeit für jede Anfrage meiner App. Einige interessante Punkte:

  • Debugbar sagt, dass es ~ 15ms Abfragezeit ist. DB ist nicht der Hauptverdächtige
  • Die Protokollierung mit datetime.now () zeigt, dass 0,1 s in der Ansicht und 40 ms mehr in einem Anforderungskontext verbracht werden
  • Ich konnte keinen einfachen Weg finden, um Vorlagen zu rendern.

Irgendeine Idee, wo ich suchen kann?

Antworten:

1 für die Antwort № 1

Angenommen, es hätte eine Endlosschleife. Wie würden Sie es finden?

Ich stelle mir vor, Sie würden es einfach im Debugger anhalten und sich den Code auf den verschiedenen Ebenen des Stapels ansehen, weil Sie wissen, dass sich die Schleife irgendwo auf dem Stapel befindet. Recht?

Angenommen, die Schleife isn "t unendlich, nur lange dauern. Ist das viel anders?

Egal was das Problem ist, wenn es kostetSie einige Prozent der Zeit, wie 90% oder 50% oder 20%, das ist die Wahrscheinlichkeit, dass Sie es auf frischer Tat ertappen, wenn Sie es pausieren. Wenn Sie es also mehrmals pausieren, werden Sie es sehen . Je schlimmer es ist, desto seltener müssen Sie es anhalten und nachsehen. Es wird offensichtlich sein.

Also vergiss das Timing. Finden Sie einfach heraus, was es tut.


Als Antwort auf die Frage gibt es hier ein mod_python-Dokument:

5.4.1 PythonEnablePdb-Syntax:
PythonEnablePdb {Ein, Aus}
Standard: PythonEnablePdb Aus
Kontext: Server Konfiguration, virtueller Host, Verzeichnis, htaccess Override: nicht None Modul: mod python.c Wenn diese Option aktiviert ist, wird mod python aktiviert Führen Sie die Handlerfunktionen in aus die Python-Debugger-PDF mit dem Funktion pdb.runcall (). Weil pdb ist ein interaktives Tool, starten Sie httpd von die Kommandozeile mit -DONE PROCESS-Option, wenn Sie diese Option verwenden Richtlinie. Sobald Ihr Handler Wenn der Code eingegeben wird, wird eine Pdb angezeigt Eingabeaufforderung, die es Ihnen ermöglicht, durchzugehen den Code und untersuchen Variablen.

5.4.2 PythonDebug-Syntax:
PythonDebug {Ein, Aus} Standard: PythonDebug Aus Kontext: Serverkonfiguration, virtueller Host, Verzeichnis, htaccess Override: nicht None Modul: mod python.c Normalerweise wird die Traceback-Ausgabe resultierend aus Nicht erfasste Python-Fehler werden an die gesendet Fehlerprotokoll. Mit PythonDebug On Direktive angegeben, wird die Ausgabe an den Kunden gesendet werden (sowie die log), außer wenn der Fehler IOError ist während des Schreibens, in welchem ​​Fall wird es Gehen Sie zum Fehlerprotokoll. Diese Richtlinie ist sehr nützlich während der Entwicklung Prozess. Es wird empfohlen, dass Sie dies tun Verwenden Sie es nicht als Produktionsumgebung es kann dem Kunden offenbaren unbeabsichtigt, möglicherweise empfindlich Sicherheitsinformationen.


0 für die Antwort № 2

Das Profilieren der App ist ein guter Ausgangspunkt (https://code.djangoproject.com/wiki/ProfilingDjango).

Bevor Sie sich die Profilstatistik ansehen, stellen Sie sicher, dass Sie wissen, wie der Anforderungs- / Antwortzyklus von Django aussieht (oder welches Framework Sie verwenden).

In den meisten Fällen wurden die Dinge in derIn anderen Fällen kann es sich um Middleware-Ebenen handeln. Beobachten Sie, für welche Ebene Sie ein Profil erstellen, funktional oder für alles, was mit der Anforderung / Antwort zu tun hat.

Andere Tricks wie das Vergleichen der Leistung zwischen dem Entwicklungs- / Produktmodus könnten ebenfalls nützlich sein. Versuchen Sie, den Django-Entwicklungsserver zu verwenden, um sicherzustellen, dass Apache / Mod_Python nicht der Schuldige ist.


-1 für die Antwort № 3

Profilieren Sie einfach die Anwendung. Es gibt eine vollständige Anleitung Hier