Tool zur statistischen Leistungsmessung in Produktionsumgebungen

Ich suche ein Tool zur statistischen Leistungsmessung im Produktionsumfeld.

Ich möchte wissen, was der Python-Interpreter die meiste Zeit macht. Mit anderen Worten, ich möchte Hotspots erkennen.

Ich möchte die Produktionsumgebung mehrere Stunden lang beobachten.

Später möchte ich aggregieren, wo der Dolmetscher die meiste Zeit verbringt.

Erforderliche Funktionen:

  • Open Source und keine virale Lizenz wie GPL
  • Nur sehr geringe Leistungseinbußen, da ich meine Produktionsumgebung überprüfen möchte
  • Geeignet für Python- und Webumgebungen (wir verwenden Django).

Antworten (2)

PyFlame sieht gut aus: https://github.com/uber/pyflame

Aus den Dokumenten:

Pyflame: Ein Ptracing-Profiler für Python

Pyflame ist ein leistungsstarkes Profilerstellungstool, das Flammendiagramme für Python generiert. Pyflame ist in C++ implementiert und verwendet den Linux-Systemaufruf ptrace(2), um Profilinformationen zu sammeln. Es kann Snapshots des Python-Aufrufstapels ohne explizite Instrumentierung erstellen, was bedeutet, dass Sie ein Profil eines Programms erstellen können, ohne seinen Quellcode zu ändern. Pyflame ist in der Lage, eingebettete Python-Interpreter wie uWSGI zu profilieren. Es unterstützt vollständig die Profilerstellung von Multithread-Python-Programmen.

Pyflame verursacht normalerweise deutlich weniger Overhead als die integrierten Profil- (oder cProfile-)Module und gibt umfangreichere Profildaten aus. Der Profiling-Overhead ist gering genug, dass Sie damit Live-Prozesse in der Produktion profilieren können.

Dieses Tool könnte helfen: https://github.com/guettli/live-trace

Lebensweg

live-trace ist eine Python-Bibliothek, um Stacktraces einer laufenden Anwendung N-mal pro Sekunde in einem Daemon-Thread zu protokollieren. Die Protokolldatei kann analysiert werden, um zu sehen, wo der Dolmetscher die meiste Zeit verbringt. Es wird "Live-Trace" genannt, da es auf Produktionssystemen ohne merkliche Auswirkungen auf die Leistung verwendet werden kann.

Wenn Sie sehen möchten, warum eine bestimmte Anfrage langsam ist, verwenden Sie einen Profiler, nicht Live-Trace.

Verwenden Sie Live-Trace, wenn Sie die Vogelperspektive sehen möchten. Wenn Sie sich die Frage stellen:

Was macht der Dolmetscher den ganzen Tag?

Dann nutzen Sie Live-Trace in Ihrer Produktionsumgebung. Lassen Sie es viele Snaphosts des Interpreter-Status sammeln. Die aktuelle Implementierung verwendet Stacktraces zum Einfrieren des Zustands des Interpreters. Nach einigen Stunden Laufzeit können Sie die gesammelten Stacktraces aggregieren und Hotspots identifizieren.

Hintergrund zu dieser Frage und Antwort bei "Software-Empfehlung"

Ich habe dieses Tool "Live-Trace" geschrieben und hier gefragt, ob es ein solches Tool gibt.

Ich habe dies getan, da ich mit der aktuellen Implementierung von Live-Trace nicht sehr zufrieden bin. Wenn der Interpreter viel Code in C-Erweiterungen ausführt, ist das Ergebnis nicht zuverlässig. AFAIK, der Daemon-Thread kann keine Stacktraces aufzeichnen, wenn sich der Haupt-Thread innerhalb von ac-Erweiterungen befindet (außer dass GIL freigegeben wird, wie hier erklärt Threadstatus und GIL ).

Eine Problemumgehung wäre ein zweiter Prozess, der Stacktraces über gdb sammelt. Oder sogar eine bessere Lösung, die ich bis jetzt nicht gefunden habe...