13 Profiling-Software zum Debuggen von Anwendungsleistungsproblemen

Der Zweck Ihrer Anwendung besteht darin, Ihren Endbenutzern gute Dienste zu leisten.

Neben anderen wünschenswerten Funktionen muss es schnell, reaktionsschnell, einfach zu bedienen und zuverlässig sein.

Aber Ihre Software so zu warten, dass sie dauerhaft Spitzenleistung liefert, ist nicht so einfach.

Wenn Ihr Code anfängt, unnötige Funktionen aufzurufen, über sich selbst stolpert, Fehler abfängt und in zusätzliche Schleifen geht, kann dies zu Ineffizienzen führen. Ihre Anwendung könnte träge werden, nicht mehr reagieren oder sich unberechenbar verhalten.

Und wenn Sie diese Probleme nicht beheben, leidet die allgemeine Anwendungsleistung.

Infolgedessen können Ihre Kunden aufgrund der schlechten Leistung und langsamen Geschwindigkeit verärgert sein oder die Verwendung Ihrer Anwendung ganz einstellen. Es verschlechtert nicht nur Ihren Ruf, sondern kostet Sie auch Einnahmen und Gewinne. Daher muss Ihr Code analysiert, überprüft und debuggt werden, um eine optimale Leistung zu erzielen. Und der schnelle Weg, dies zu tun, besteht darin, ein Software-Profiling-Tool zu verwenden, um Ihre Codes zu überwachen und zu debuggen und leistungsbezogene Engpässe zu beseitigen.

In diesem Artikel erfahren Sie mehr über Software-Profiling und wie es Ihnen helfen kann. Und dann führe ich Sie durch einige der besten Profiling-Tools, um Ihre Anwendung zu debuggen und ihre Leistung zu optimieren.

Was ist Software-Profiling?

Software-Profiling ist eine dynamische Codeanalyse, bei der das Verhalten eines Programms anhand der während der Programmausführung gesammelten Daten untersucht wird. Es zielt darauf ab, verschiedene Programmabschnitte zu bestimmen, die Sie optimieren müssen, um die Anwendungsgeschwindigkeit und Reaktionsfähigkeit zu erhöhen und den Speicher- und Ressourcenverbrauch zu verringern.

Ein Software-Profiler misst üblicherweise die Dauer und Häufigkeit von Funktionsaufrufen zusammen mit der mit einem Programm verbundenen Speicher- oder Zeitkomplexität. Es sind auch spezielle Profiler verfügbar, wie z. B. Speicher-Profiler.

Die Profilerstellung erfolgt im Allgemeinen durch die Instrumentierung des Quellcodes des Programms. Profiler können verschiedene Techniken der Profilerstellung verwenden, wie z. B. instrumentierte, ereignisbasierte, statistische oder Simulationsmethoden.

Warum ist Software-Profiling wichtig?

Die Erstellung von Softwareprofilen ist erforderlich, um die Ressourcennutzung und die Ausführungszeit zu bestimmen, die mit einer bestimmten Funktion verbunden sind. Es hilft, die Geschwindigkeit des Programms zu optimieren und gleichzeitig sicherzustellen, dass es nur minimale Ressourcen verbraucht.

Darüber hinaus dient es zur Verfolgung und Optimierung der CPU-Auslastung und der Befehlsausführungszeit.

Daher ist die Auswahl des richtigen Software-Profiling-Tools notwendig, um sicherzustellen, dass Sie die leistungsbezogenen Probleme schneller beheben können, um die Effizienz zu verbessern und eine bessere Endbenutzererfahrung zu bieten. Viele Profiler verfügen außerdem über detaillierte Berichte und interaktive Grafiken und Visualisierungen, die Ihnen helfen, die genaue Ursache der Probleme zu finden und deren Lösung zu erleichtern.

Hier ist also eine Liste mit einigen der besten Software-Profiler, die Sie ausprobieren können, und sagen Sie uns, was für Sie am besten funktioniert hat.

Spionage

Spionage ist ein hervorragender Sampling-Profiler für Python. Auf diese Weise können Sie einen kurzen Blick auf all die Dinge werfen, mit denen Ihre Python-basierte Anwendung Zeit verbringt.

Dazu müssen Sie Ihre Codes nicht ändern oder das Programm komplett neu starten. py-spy ist mit geringem Overhead verbunden und wurde in Rust entwickelt, um eine höhere Geschwindigkeit auszuführen. Es ist nicht dafür ausgelegt, in demselben Prozess zu arbeiten, in dem Ihr profiliertes Python-basiertes Programm ausgeführt wird. Dies impliziert, dass Py-Spy sehr sicher und geschützt gegen die Produktions-Python-basierten Codes verwendet werden kann.

Mit dem Tool können Sie Profile aufzeichnen, Flammendiagramme erstellen, um interaktive SVG-Dateien zu erstellen. Sie können auch andere Optionen anzeigen, z. B. das Ändern von Abtastraten, native C-Erweiterungen für die Profilerstellung, Unterprozesse, Thread-IDs und mehr. Mit dem Befehl „top“ können Sie eine Live-Ansicht der in Ihren Programmen ausgeführten Funktionen erhalten und mit dem Befehl „dump“ für jeden Python-Thread den aktuellen Aufrufstapel anzeigen.

Es unterstützt jede Version des CPython-Interpreters, z. B. 2.3 – 2.7 & 3.3 – 3.8. Sie können Py-Spy von PyPI oder GitHub installieren.

Pyroskop

Die Open-Source-Software zur kontinuierlichen Profilerstellung von Pyroskop hilft Ihnen, alle Leistungsprobleme in Ihrer Anwendung in wenigen Minuten zu beheben.

Sie können den Server starten, gefolgt vom Agenten, egal was Sie verwenden, Docker, Linux oder nach Ruby- oder Go-Dokumenten suchen, Pyroscope deckt Sie ab. Selbst wenn Sie zehn Sekunden oder zehn Monate an Software-Profilierungsdaten anstreben, führt die speziell entwickelte Speicher-Engine schnelle Abfragen durch.

  Verfolgen, löschen und sichern Sie gesendete Gmail-Anhänge mit docTrackr

Sie müssen sich keine Gedanken über den Overhead oder die Anwendungsleistung machen, da sie eine Sampling-Profiling-Technologie verwenden, die die Leistung nicht beeinträchtigt. Pyroscope speichert Ihre Profildaten effizient; Daher ist es für Sie auch dann kostengünstig, wenn Sie unterschiedliche Profiling-Daten aus verschiedenen Anwendungen über Jahre speichern möchten.

Es funktioniert unter macOS, Linux und Docker und unterstützt Programme, die in Python, Go und Ruby geschrieben wurden.

Blasenprof

Blasenprof von Clinic.js bietet eine frische und einzigartige Möglichkeit, Ihre in Node.js geschriebene Software zu profilieren. Es verwendet eine „Bubble“-Benutzeroberfläche, die jedem, vom Experten bis zum Anfänger, hilft, die asynchrone Zeit zu bestimmen, die in Ihrer App verbracht wird.

Es visualisiert, wie Ihre Node.js-Prozesse funktionieren, indem es seine asynchronen Operationen beobachtet, sie gruppiert, die Verzögerungen berechnet und sie abbildet.

Bubbleprof bestimmt die Operationszeiten, indem es die Größe der Blasen innerhalb einer bestimmten Gruppe von Operationen betrachtet, die Ihr Code, ein Knotenkern oder ein Modul sein kann. Es schlägt auch die angrenzenden Gruppen zusammen, um Unordnung zu verringern.

Um die Verzögerungen zu berechnen, wenn die Operation von einer Gruppe zur anderen fließt, misst Bubbleprof die Pfeillänge, die Blasen verbindet. Darüber hinaus verwendet es auch unterschiedliche Farben in den Messprozessen. Gleichzeitig stellen die inneren farbigen Linien eine Mischung aus asynchronen Operationstypen als Verzögerungsursache dar.

Pyinstrument

Optimieren Sie Ihre Python-Codes mit Pyinstrument.

Es zeigt Ihnen, warum Ihr Python-Code langsam ist, und hilft Ihnen, die Probleme zu diagnostizieren, damit Sie diese blitzschnelle Leistung erzielen können.

Um Pyinstrument zu verwenden, müssen Sie kein Python-Skript schreiben; Rufen Sie Pyinstrument einfach direkt über die Befehlszeile auf. Ihr Skript würde normal ausgeführt, und das Tool würde eine farbige Zusammenfassung der Bereiche liefern, in denen die Anwendung ihre Zeit verbracht hat. Es kommt auch mit einer Python-API, die den Prozess noch einfacher macht.

Sie haben die Möglichkeit, Webanforderungen auch in Flask und Django zu profilieren, für die sie eine ausführliche Dokumentation gepflegt haben. Beachten Sie hier bitte, dass Pyinstrument ein statistisches Profiling anbietet, das alle 1 ms den Aufrufstapel aufzeichnet, anstatt jeden Funktionsaufruf Ihres Programms zu verfolgen.

Dies ist vorteilhaft, da statistische Profiler im Vergleich zu Ablaufverfolgungs-Profilern einen geringeren Overhead mit sich bringen. Da der gesamte Stapel aufgezeichnet wird, wird das Verfolgen teurer Funktionsaufrufe mühelos. Darüber hinaus blendet Pyinstrument (standardmäßig) Bibliotheksrahmen aus, sodass Sie sich auf Anwendungen oder Module konzentrieren können, die für die Beeinträchtigung der Leistung verantwortlich sind.

Das Debuggen von Leistungsproblemen wird erleichtert, da Pyinstrument die Zeit aufzeichnet, die mit der „Wall-Clock“-Zeit verbracht wird. Das Tool verfolgt die gesamte Zeit des Programms, um Dateien zu lesen, Daten herunterzuladen, mit einer Datenbank zu kommunizieren usw.

Xdebug

Um die Leistungsprobleme Ihres Codes zu verbessern und Ihre Entwicklungserfahrung ein wenig unterhaltsamer zu gestalten, Xdebug verfügt über weitreichende Funktionen für die Profilerstellung und das Debugging.

Es ist eigentlich eine PHP-Erweiterung, mit der Sie die Engpässe in Ihrer PHP-Anwendung finden und ihre Leistung mithilfe externer Visualisierungstools analysieren können, um Leistungsdiagramme zu erstellen.

Xdebug erstellt eine detaillierte Ausgabe, die den Pfad der Anwendung zum Erreichen eines Fehlers zeigt, einschließlich der Parameter, die sie an eine bestimmte Funktion übergeben hat. Dies geschieht, um die Fehler zu verfolgen. Um einem Entwickler zu helfen, die Dinge klar zu verstehen, generiert es farbcodierte Informationen zusammen mit strukturierten Ansichten.

Es wird auch mit einem Remote-Debugger geliefert, mit dem Sie Xdebug mit einem laufenden Code, einer IDE oder einem Browser verbinden können, um Code-Haltepunkte anzuzeigen und die Codes Zeile für Zeile auszuführen. Eine weitere Funktion, die es bietet, ist die Codeabdeckung, die zeigt, wie viel Code Ihres Programms ausgeführt wurde, und es hilft Ihnen auch bei Komponententests.

SPX

Simple Profiling eXtension (SPX) ist eine für PHP entwickelte Profilerstellungserweiterung. Es hat einige einzigartige Eigenschaften, die es von anderen Profiling-Erweiterungen unterscheiden. Die Nutzung ist völlig KOSTENLOS und auf Ihre Infrastruktur beschränkt, was bedeutet, dass kein Risiko von Datenlecks besteht.

Die Einfachheit von SPX macht es sehr einfach zu verwenden: Sie müssen lediglich eine Befehlszeile oder eine Umgebungsvariable festlegen, um ein Skript zu profilieren. Oder Sie können auch das Optionsfeld auf einer Webseite aktivieren, um das Skript zu profilieren. Daher müssen Sie Ihren Code nicht manuell instrumentieren.

Es unterstützt auch ein laufendes Befehlszeilenskript – Strg-C. Darüber hinaus macht dieser Prozess auch die Verwendung eines Befehlszeilen-Launchers oder einer dedizierten Browsererweiterung überflüssig. SPX unterstützt mehrere Metriken von etwa 22, einschließlich verschiedener Zeit- und Speichermetriken, Objekte, verwendete Dateien, E/A usw.

  Welche sollten Sie im Jahr 2022 wählen?

Es kann Daten sammeln, ohne den Kontext zu verlassen. Die Web-Benutzeroberfläche ermöglicht das Konfigurieren/Aktivieren der Profilerstellung für die aktuell verwendete Browsersitzung und listet alle profilierten Skriptdetails und Berichte auf. Über die Web-Benutzeroberfläche können Sie einen bestimmten Bericht für eine tiefere Analyse auswählen und bietet einige interaktive Visualisierungen wie Flamegraph, Flat Profile und Timeline, die auf Funktionsaufrufe in Millionenhöhe skaliert werden können.

Präfix

Präfix von Stackify ist ein einfach zu installierender und leichter Code-Profiler, den viele Entwickler lieben. Es hilft Ihnen, die Engpässe in Ihrer Anwendungsleistung zu beseitigen, um sie zu optimieren und die Benutzererfahrung zu verbessern.

Die überlegenen Tracing- und Profilerstellungsfunktionen von Prefix ermöglichen es Ihnen, versteckte Ausnahmen, langsame SQL-Abfragen und mehr schnell zu finden. Es bietet Ihren Entwicklern die wahre Leistungsfähigkeit von APM (Application Performance Monitoring). Zu diesem Zweck validiert Prefix die Codeleistung so, wie sie geschrieben ist, und ermöglicht es Ihnen, Codes mit besserer Leistung zum Testen zu pushen.

Auf diese Weise erhält es weniger Support-Tickets von der Produktionsseite und hilft Entwicklungsmanagern, die Ziele früher zu erreichen. Entdecken Sie alle leistungsschwachen Abfragen, unbekannten Engpässe und ORM-generierten Abfragen.

Sie können auch jeden SQL-Aufrufparameter verfolgen, die Zeitangaben herunterladen und die betroffenen Datensätze anzeigen. Präfix macht es einfacher, auch N+1-Muster zu erkennen. Vergessen Sie das Sortieren all dieser unordentlichen Protokolle; Bringen Sie sie zusammen, um Probleme leicht zu lokalisieren.

Mit Prefix können Sie den Kontext eines verdächtigen Protokolls direkt in einer Abfrageanforderung finden und mühelos von einem Protokoll zu einer Ablaufverfolgung springen, um Fehler zu beheben. Präfix wirft Licht auf Abhängigkeiten mit schlechter Leistung, was nützlich ist, um versteckte Ausnahmen zu finden und mit Legacy-Code oder Framework-Abschnitten zu arbeiten. Diese Abhängigkeiten können Webdienste, Dienste von Drittanbietern, Cache-Dienste und andere sein.

Prefix funktioniert unter Windows und Mac und unterstützt .Net, Ruby, Java, PHP, Python und Node.js.

Waage

Waage ist ein hochpräziser, leistungsstarker GPU-, CPU- und Speicher-Profiler für Python-basierte Programme. Es bietet mehrere Vorteile gegenüber anderen Profilern, z. B. das Ausführen von Aufträgen mit schnelleren Größenordnungen und das Liefern von detaillierteren Informationen.

Scalene ist unglaublich schnell und nutzt Sampling statt Instrumentierung. Es ist nicht einmal auf die Ablaufverfolgungsfunktionen von Python angewiesen. Darüber hinaus liegt der Overhead normalerweise unter 10-20%. Dieses Tool führt Software-Profiling auf Zeilenebene durch und verweist auf die Codezeilen, die für die Ausführungszeit Ihres Programms verantwortlich sind.

Diese Details sind wertvoller als die bei der Profilerstellung auf Funktionsebene. Scalene trennt die rein in Python verbrachte Zeit von der für nativen Code, der Bibliotheken enthält. Da die meisten Python-Programmierer die Leistung von nativem Code nicht optimieren, können sich Entwickler auf die Optimierung von Codes konzentrieren, die Sie tatsächlich verbessern können.

Es hebt Hotspots rot hervor, die es Ihnen erleichtern, die CPU-Zeit/Speicherzuweisung zu erkennen und die Systemzeit einfach zu trennen, um E/A-Probleme zu finden. Scalene kann die GPU-Zeit melden, die Speichernutzung profilieren und die CPU-Nutzung verfolgen. Scalene kann auch mögliche Speicherlecks identifizieren, das Kopiervolumen profilieren und reduzierte Profile für Codezeilen generieren, die mehr als 1 % der CPU verbrauchen.

VisualVM

Das All-in-One-Tool zur Fehlerbehebung für Java, VisualVM, ist so konzipiert, dass es sowohl für die Produktions- als auch für die Entwicklungsphase verwendet werden kann. Es ist eine visuelle Software, die leichtgewichtige Profilerstellungsfunktionen und JDK-Befehlszeilentools integriert.

VisualVM überwacht Anwendungen, die auf Java 1.4+ ausgeführt werden, und behebt sie mithilfe verschiedener Technologien wie JMX, jvmstat, Attach API und Serviceability Agent. Dieses Tool eignet sich perfekt für die unterschiedlichen Anforderungen von Qualitätsingenieuren, Systemadministratoren und Endbenutzern.

Es erkennt remote und lokal laufende Java-basierte Anwendungen automatisch und listet sie auf. Das Tool ermöglicht es Ihnen auch, die Programme manuell über die JMX-Verbindung zu definieren. Für jeden Prozess werden typische Laufzeitdaten wie PID, übergebene Argumente, JDK-Home, Hauptklasse, JVM-Flags, JVM-Version sowie System- und Argumenteigenschaften angezeigt.

VisualVM überwacht CPU-Auslastung, Heap und Metaspace oder permanenten Generierungsspeicher, laufende Threads und geladene Klassen in einer Anwendung. Es zeigt alle laufenden Threads in einer Zeitleiste mit aggregierten Ruhe-, Lauf-, Park-, Überwachungs- und Wartezeiten an.

Sowohl Instrumentierungs- als auch Sampling-Profiler können mit VisualVM für die Speicherverwaltung und Anwendungsleistung ausgeführt werden. Es zeigt Thread-Dumps an, um schnelle Einblicke in Prozesse zu erhalten. Es zeigt und erstellt bei Bedarf auch .hprof-Snapshots, um Ihnen zu helfen, Heap-Nutzungsineffizienzen aufzudecken und Speicherlecks zu debuggen.

  IaC-Tools verstehen: Cloudformation vs. Terraform

Darüber hinaus kann VisualVM grundlegende Daten zu einem abgestürzten Java-basierten Prozess zusammen mit seiner Umgebung lesen. Sie können Ihre Apps offline analysieren; Es kann die App-Laufzeitumgebung und -Konfiguration mit erstellten Heap-Dumps, Thread-Dumps und Profiling-Snapshots speichern, die Sie zu einem späteren Zeitpunkt offline verarbeiten können.

Es funktioniert unter Windows, Linux und Unix.

Orbit-Profiler

Visualisieren Sie Ihre C/C++-Anwendung und finden Sie Leistungsprobleme schnell mit Orbit-Profiler. Dies ist ein Debugging-Tool und ein eigenständiger Profiler, der Entwicklern helfen soll, den Ausführungsablauf der komplexen App anzuzeigen und zu verstehen.

Es bietet einen scharfen Überblick über alles, was in der App passiert, sodass Sie Leistungsengpässe schnell beseitigen und die hohe Leistung Ihrer Anwendung wiederherstellen können.

Orbit Profiler kann effizient mit jeder C- oder C++-App arbeiten, vorausgesetzt, es kann auf die PDB-Datei zugreifen. Als nächstes beginnt es mit der Profilerstellung, sobald Sie das Herunterladen des Programms abgeschlossen haben. Das Tool springt zum Zielprozess, hängt sich an ausgewählte Funktionen an und führt ein Profiling durch.

Es kann sogar an Ihren optimierten endgültigen oder Versand-Builds arbeiten. Neben dynamischer Instrumentierung bietet Orbit Profiler auch „always on“-Sampling-Funktionen, die schnell, jederzeit verfügbar und robust sind.

Es funktioniert unter Windows und Linux.

Uber JVM-Profiler

Ausgestattet mit erweiterten Profilierungsfunktionen, Uber JVM-Profiler ist eine weitere gute Option für Ihre Java-basierten Anwendungen.

Es bietet einen Java-Agenten, der mehrere Stack-Traces und Metriken für Spark/Hadoop-JVM-Prozesse auf verteilte Weise sammelt, beispielsweise Speicher-/CPU-/IO-Metriken.

Das Tool kann Java-Argumente und -Methoden auf Benutzercodes verfolgen, ohne sie zu ändern. Sie können es auch verwenden, um die Anruflatenz von HDFS-Namensknoten für alle Spark-Apps zu verfolgen und Probleme zu finden. Es kann sogar die HDFS-Dateipfade der Spark-App verfolgen, um heiße Dateien zu finden und weitere Optimierungen durchzuführen.

Uber JVM Profiler wurde ursprünglich entwickelt, um Spark-Apps zu profilieren, die im Allgemeinen viele Maschinen oder Prozesse für eine Anwendung umfassen. Daher können Menschen Metriken für diese Maschinen oder Prozesse leicht korrelieren.

Das Tool funktioniert jedoch wie ein typischer Java-Agent und Sie können es für alle Ihre JVM-Prozesse verwenden. Zu seinen Merkmalen gehören:

  • Debuggen der Speichernutzung von Spark-App-Executors, wie z. B. Java-Heap-Speicher, nativer Speicher, Nicht-Heap-Speicher, Pufferpool und Speicherpool
  • Debuggen der CPU-Auslastung und Garbage-Collection-Zeit
  • Debuggen von Java-Klassenmethoden für ihre Häufigkeit und Zeit oder Dauerprofilierung
  • Argument-Profiling (Debuggen und Verfolgen von Java-Klassenmethodenaufrufen und ihrem Argumentwert)
  • Stacktrack-Profilerstellung und Generierung von Flamegraphs für CPU-Zeit
  • Debuggen von I/O-Metriken und JVM-Thread-Metriken

Tracy

Tracy ist ein nützliches Tool, das Entwicklern hilft, PHP-Programme einfach zu debuggen. Es hat ein benutzerfreundliches Design und erweiterte Funktionen wie CLI-Unterstützung, Debugging von AJAX-Aufrufen und mehr.

Es kann Fehler schnell finden und beheben, Variablen ausgeben, Fehler protokollieren, den Speicherverbrauch visualisieren und die Ausführungszeit von Abfragen oder Skripten bestimmen. Die Verwendung von Farbcodierungen und die Hervorhebung von Problemen in Rot mit klaren Erklärungen hilft Ihnen, Ausnahmen und Fehler leicht zu visualisieren und zu verstehen.

Tracy verfügt über eine Protokollierungsfunktion und eine automatische Umgebungserkennung. Es speichert Daten in Protokolldateien und zeigt einem Besucher während Ausfallzeiten Serverfehlermeldungen an. Tracy kann auch in Drupal 7, OpenCart, WordPress und mehr integriert werden.

vprof

vprof ist ein visueller Profiler für Python-Anwendungen. Es bietet reichhaltige, interaktive Visualisierungen für die verschiedenen Eigenschaften Ihres Python-Programms, wie z. B. Speichernutzung und Laufzeit.

Es ist unter einer BSD-Lizenz verfügbar und unterstützt Python 3.4 und höher.

Fazit

Die Anwendungsleistung ist ein entscheidender Faktor, um die Erwartungen der Endbenutzer zu erfüllen. Und wenn Leistungsprobleme auftreten, müssen Sie bereit sein, das Problem zu diagnostizieren, bevor Sie die Endbenutzererfahrung beeinträchtigen.

Optimieren Sie daher Ihre Anwendungen weiter und beheben Sie die Probleme sofort, um den Benutzern mit den in diesem Artikel erwähnten Tools weiterhin eine superschnelle Anwendungsleistung zu bieten.

Hier ist eine schnelle Vergleichstabelle, die die oben genannten Profiler zeigt und wofür sie hauptsächlich verwendet werden.

Name
Sprachen
Spionage
Python
Pyroskop
Python, Rubin, Los
Blasenprof
Node.js
Pyinstrument
Python
Xdebug
PHP
SPX
PHP
Präfix
Python, .NET, Java, Node.js, Rubin, PHP
Waage
Python
VisualVM
Java
Orbit-Profiler
C, C++
Uber JVM-Profiler
Java
Tracy
PHP
vprof
Python