Der Zweck Ihrer Anwendung ist es, Ihren Endbenutzern einen guten Service zu bieten.
Es muss neben anderen wünschenswerten Funktionen schnell, reaktionsschnell, benutzerfreundlich und zuverlässig sein.
Es ist jedoch nicht so einfach, Ihre Software so zu warten, dass weiterhin Leistung auf höchstem Niveau erzielt wird.
Wenn Ihr Code unnötige Funktionen aufruft, über sich selbst stolpert, Fehler abfängt und in zusätzliche Schleifen gerät, kann dies zu Ineffizienzen führen. Ihre Anwendung kann träge werden, nicht mehr reagieren oder sich unregelmäßig verhalten.
Wenn Sie diese Probleme nicht beheben, leidet die allgemeine Anwendungsleistung.
Infolgedessen können Ihre Kunden aufgrund der schlechten Leistung irritiert werden oder die Verwendung Ihrer Anwendung ganz einstellen langsame Geschwindigkeit. Dies beeinträchtigt nicht nur Ihren Ruf, sondern kostet Sie auch Umsatz und Gewinn. Daher muss Ihr Code analysiert, überprüft und debuggt werden, um eine optimale Leistung zu erzielen. Der schnelle Weg, dies zu tun, besteht darin, ein Software-Profiling-Tool zu verwenden, um Ihre Codes zu überwachen und zu debuggen und leistungsbedingte Engpässe zu beseitigen.
In diesem Artikel erfahren Sie mehr über Software-Profiling und wie es Ihnen helfen kann. Und dann werde ich Sie durch einige der besten Profiling-Tools führen, um Ihre Anwendung zu debuggen und ihre Leistung zu optimieren.
Was ist Software-Profilerstellung?
Bei der Softwareprofilerstellung handelt es sich um eine dynamische Codeanalyse, bei der das Verhalten eines Programms anhand der während der Programmausführung gesammelten Daten untersucht wird. Ziel ist es, verschiedene Programmabschnitte zu bestimmen, die Sie optimieren müssen, um die Anwendungsgeschwindigkeit und Reaktionsfähigkeit zu erhöhen und den Speicher- und Ressourcenverbrauch zu senken.
Ein Software-Profiler misst üblicherweise die Dauer und Häufigkeit von Funktionsaufrufen sowie die mit einem Programm verbundene Speicher- oder Zeitkomplexität. Es sind auch bestimmte Profiler verfügbar, z. B. Speicherprofiler.
Die Profilerstellung erfolgt in der Regel durch Instrumentierung des Quellcodes des Programms. Profiler können verschiedene Techniken der Profilerstellung verwenden, z. B. instrumentierte, ereignisbasierte, statistische oder Simulationsmethoden.
Warum ist Software-Profiling wichtig?
Softwareprofile sind erforderlich, um die Ressourcennutzung und die Ausführungszeit zu bestimmen, die mit einer bestimmten Funktion verbunden sind. Es hilft optimieren die Programmgeschwindigkeit und gleichzeitig sicherstellen, dass es nur minimale Ressourcen verbraucht.
Darüber hinaus wird die CPU-Auslastung und die Befehlsausführungszeit verfolgt und optimiert.
Daher ist die Auswahl des richtigen Software-Profiling-Tools erforderlich, um dies sicherzustellen Debuggen Sie die leistungsbezogenen Probleme schneller, um die Effizienz zu verbessern und eine bessere Endbenutzererfahrung zu bieten. Viele Profiler verfügen außerdem über detaillierte Berichte sowie interaktive Grafiken und Visualisierungen, mit denen Sie die genaue Ursache der Probleme ermitteln und deren Lösung vereinfachen können.
Hier ist eine Liste der besten Software-Profiler, die Sie ausprobieren können, und sagen Sie uns, was für Sie am besten funktioniert hat.
py-spy
Py-Spion ist ein ausgezeichneter Sampling-Profiler für Python. Auf diese Weise erhalten Sie einen kleinen Einblick in alle Dinge, für die Ihre Python-basierte Anwendung Zeit benötigt.
Dazu müssen Sie Ihre Codes nicht ändern oder das Programm komplett neu starten. py-spy ist mit geringem Overhead verbunden und wird in entwickelt Rust größere 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 abrufen und mit dem Befehl „dump“ für alle den aktuellen Aufrufstapel anzeigen Python-Thread.
Es unterstützt jede CPython-Interpreter-Version, z. B. 2.3 - 2.7 und 3.3 - 3.8. Sie können py-spy von PyPI oder GitHub installieren.
Pyroscope
Die Open-Source-Software für die kontinuierliche Profilerstellung von Pyroskop hilft Ihnen, alle Leistungsprobleme in Ihrer Anwendung in wenigen Minuten zu beheben.
Sie können den Server starten, gefolgt vom Agenten, unabhängig davon, was Sie verwenden, Docker, Linux oder nach Ruby- oder Go-Dokumenten suchen. Pyroscope deckt Sie ab. Selbst wenn Sie zehn Sekunden oder zehn Monate Softwareprofildaten anstreben, führt die speziell entwickelte Speicher-Engine schnelle Abfragen durch.
Sie müssen sich keine Gedanken über den Overhead oder die Anwendungsleistung machen, da die Sampling-Profiling-Technologie verwendet wird, die die Leistung nicht beeinträchtigt. Pyroscope speichert Ihre Profildaten effizient. Daher ist es für Sie kostengünstig, selbst wenn Sie jahrelang verschiedene Profildaten aus verschiedenen Anwendungen speichern möchten.
Es funktioniert unter MacOS, Linux und Docker und unterstützt in Python geschriebene Programme. Gound Ruby.
Bubbleprof
Blasenprof by Clinic.js bietet eine frische und einzigartige Möglichkeit, Ihre in Node.js geschriebene Software zu profilieren. Es verwendet eine "Bubble" -UI, mit der jeder, vom Experten bis zum Anfänger, die in Ihrer App verbrachte asynchrone Zeit bestimmen kann.
Es visualisiert die Funktionsweise Ihrer Node.js-Prozesse, indem die asynchronisierten Vorgänge beobachtet, gruppiert, die Verzögerungen berechnet und zugeordnet werden.
Bubbleprof ermittelt die Betriebszeiten anhand der Größe der Blasen innerhalb einer bestimmten Gruppe von Vorgängen, bei denen es sich um Ihren Code, einen Knotenkern oder ein Modul handeln kann. Es schlägt auch die benachbarten Gruppen zusammen, um Unordnung zu verringern.
Um die Verzögerungen zu berechnen, während der Vorgang von einer Gruppe zur anderen fließt, misst Bubbleprof die Pfeillänge, die die Blasen verbindet. Darüber hinaus werden bei den Messvorgängen unterschiedliche Farben verwendet. Gleichzeitig stellen die inneren farbigen Linien eine Mischung von asynchronen Operationstypen als Ursache für die Verzögerung dar.
Pyinstrument
Optimieren Sie Ihre Python-Codes mit Pyinstrument.
Es zeigt Ihnen, warum Ihr Python-Code langsam ist, und hilft Ihnen bei der Diagnose der Probleme, damit Sie diese blitzschnelle Leistung erzielen können.
Um Pyinstrument verwenden zu können, 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, Webanfragen in zu profilieren Flasche und auch Django, für die sie eine ausführliche Dokumentation geführt haben. Beachten Sie hierbei, dass Pyinstrument statistische Profile erstellt, mit denen der Aufrufstapel alle 1 ms aufgezeichnet wird, anstatt jeden von Ihrem Programm ausgeführten Funktionsaufruf zu verfolgen.
Dies ist vorteilhaft, da statistische Profiler im Vergleich zu Tracing-Profilen einen geringeren Overhead verursachen. Durch die Aufzeichnung des gesamten Stapels wird das Verfolgen teurer Funktionsaufrufe mühelos. Darüber hinaus verbirgt Pyinstrument (standardmäßig) Bibliotheksrahmen, 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 vereinfacht, da Pyinstrument die Zeit aufzeichnet, die mit der Wanduhrzeit verbracht wurde. Das Tool verfolgt die gesamte Programmzeit, 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 bietet umfassende Funktionen zum Erstellen von Profilen und zum Debuggen.
Es ist eigentlich eine PHP-Erweiterung, mit der Sie die finden können Engpässe in Ihrem PHP Anwendung und Analyse der Leistung mithilfe externer Visualisierungstools zur Erstellung von Leistungsdiagrammen.
Xdebug erstellt eine detaillierte Ausgabe, die den Pfad der Anwendung zum Erreichen eines Fehlers zeigt, einschließlich der Parameter, die an eine bestimmte Funktion übergeben wurden. Dies geschieht, um die Fehler zu verfolgen. Damit ein Entwickler die Dinge besser verstehen kann, werden farbcodierte Informationen zusammen mit strukturierten Ansichten generiert.
Es wird auch ein Remote-Debugger mitgeliefert, mit dem Sie Xdebug mit einem laufenden Code, einer IDE oder einem Browser verbinden können, um Code-Haltepunkte anzuzeigen und die Codes zeilenweise auszuführen. Eine weitere Funktion ist die Codeabdeckung, die anzeigt, wie viel Code Ihres Programms ausgeführt wurde, und die Ihnen auch bei Komponententests hilft.
SPX
Einfache Profilerstellung eXtension (SPX) ist eine Profilerweiterung für PHP. Es verfügt über einige einzigartige Eigenschaften, die es von anderen Profilerweiterungen abheben. Es ist völlig KOSTENLOS zu verwenden und beschränkt sich nur auf Ihre Infrastruktur, was bedeutet, dass kein Risiko für Datenlecks besteht.
Die Einfachheit von SPX macht die Verwendung sehr einfach: Sie müssen lediglich eine Befehlszeilen- oder Umgebungsvariable festlegen, um ein Skript zu profilieren. Sie können auch das Optionsfeld auf einer Webseite aktivieren, um ein Profil für das Skript zu erstellen. Daher müssen Sie Ihren Code nicht manuell instrumentieren.
Es unterstützt auch ein laufendes Befehlszeilenskript - Strg-C. Darüber hinaus entfällt durch diesen Vorgang die Verwendung eines Befehlszeilen-Starters oder einer dedizierten Browser-Erweiterung. SPX unterstützt Multi-Metriken von ungefähr 22, einschließlich verschiedener Zeit- und Zeitmetriken Speichermetriken, Objekte, verwendete Dateien, E / A usw.
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 eingehendere Analyse auswählen und einige interaktive Visualisierungen wie Flamegraph, flaches Profil und Zeitachse bereitstellen, die auf Funktionsaufrufe in Millionenhöhe skaliert werden können.
Prefix
Vorsilbe by Stackify ist ein einfach zu installierender und leichtgewichtiger 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.
Mit den hervorragenden Funktionen für die Ablaufverfolgung und Profilerstellung von Prefix können Sie schnell versteckte Ausnahmen, langsame SQL-Abfragen und mehr finden. Es bietet Ihren Entwicklern die wahre Kraft von APM (Überwachung der Anwendungsleistung). Zu diesem Zweck überprüft Prefix die Codeleistung so, wie sie geschrieben wurde, und ermöglicht es Ihnen, leistungsfähigere Codes 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. Ermitteln Sie alle leistungsschwachen Abfragen, unbekannten Engpässe und ORM-generierten Abfragen.
Sie können auch jeden SQL-Aufrufparameter verfolgen, die Timings herunterladen und die betroffenen Datensätze anzeigen. Das Präfix macht es einfacher, auch N + 1-Muster zu erkennen. Vergessen Sie das Durchsuchen all dieser unordentlichen Protokolle. Bringen Sie sie zusammen, um Probleme leicht zu lokalisieren.
Mit dem Präfix können Sie den Kontext eines verdächtigen Protokolls direkt in einer Abfrageanforderung finden und zum mühelosen Debuggen von einem Protokoll zu einer Ablaufverfolgung springen. Das Präfix beleuchtet Abhängigkeiten mit schlechter Leistung. Dies ist hilfreich, 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.
Das Präfix funktioniert unter Windows und Mac und unterstützt .NET, Ruby, Java, PHP, Python und Node.js.
Scalene
Scalene ist ein hochpräziser, leistungsstarker GPU-, CPU- und Speicherprofiler für Python-basierte Programme. Es bietet gegenüber anderen Profilern mehrere Vorteile, z. B. die Ausführung von Aufträgen mit schnelleren Größenordnungen und die Bereitstellung detaillierterer Informationen.
Scalene ist unglaublich schnell und verwendet eher Sampling als Instrumentierung. Es ist nicht einmal auf die Tracing-Funktionen von Python angewiesen. Darüber hinaus liegt der Overhead normalerweise unter 10-20%. Dieses Tool führt Softwareprofile auf Zeilenebene durch und zeigt 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 Zeit, die nur in Python verbracht wird, von der Zeit des nativen Codes, der Bibliotheken enthält. Da die meisten Python-Programmierer die native Codeleistung nicht optimieren, können Entwickler ihre Bemühungen auf die Optimierung von Codes konzentrieren, die Sie tatsächlich verbessern können.
Es hebt Hotspots in Rot hervor, die es Ihnen erleichtern, die CPU-Zeit- / Speicherzuordnung zu erkennen und die Systemzeit leicht zu trennen, um E / A-Probleme zu finden. Scalene kann die GPU-Zeit melden, die Speichernutzung profilieren und die CPU-Auslastung verfolgen. Scalene kann auch mögliche Speicherverluste und das Kopiervolumen von Profilen identifizieren 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 sowohl für die Produktions- als auch für die Entwicklungsphase konzipiert. Es ist eine visuelle Software, die einfache Profiling-Funktionen und Befehlszeilen-JDK-Tools integriert.
VisualVM überwacht Anwendungen, die unter 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 unterschiedliche Anforderungen von Qualitätsingenieuren, Systemadministratoren und Endbenutzern.
Es erkennt remote und lokal ausgeführte Java-basierte Anwendungen automatisch und listet sie auf. Mit dem Tool können Sie die Programme auch manuell über die JMX-Verbindung 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 die CPU-Auslastung, den Heap- und Metaspace- oder permanenten Generierungsspeicher, führt Threads aus und lädt 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 die Anwendungsleistung ausgeführt werden. Es zeigt Thread-Dumps an, um schnelle Einblicke in Prozesse zu erhalten. Außerdem werden bei Bedarf .hprof-Snapshots angezeigt und erstellt, um Ineffizienzen bei der Heap-Nutzung aufzudecken und Speicherlecks zu beheben.
Darüber hinaus kann VisualVM Basisdaten eines abgestürzten Java-basierten Prozesses 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 mithilfe von schnell Leistungsprobleme Orbit-Profiler. Dies ist ein Debugging-Tool und ein eigenständiger Profiler, mit dem Entwickler den Ausführungsfluss der komplexen App anzeigen und nachvollziehen können.
Es bietet einen scharfen Überblick über alle Vorgänge in der App, sodass Sie die Leistungsengpässe schnell beseitigen und die hohe Leistung Ihrer Anwendung wiederherstellen können.
Orbit Profiler kann effizient an jeder C- oder C ++ - App arbeiten, sofern es auf die PDB-Datei zugreifen kann. Als Nächstes beginnt die Profilerstellung, sobald Sie das Programm heruntergeladen haben. Das Tool springt zum Zielprozess, bindet sich an ausgewählte Funktionen und führt eine Profilerstellung durch.
Es kann sogar an Ihren optimierten End- oder Versand-Builds arbeiten. Neben der dynamischen Instrumentierung bietet Orbit Profiler auch Sampling-Funktionen, die schnell verfügbar, jederzeit verfügbar und robust sind.
Es funktioniert unter Windows und Linux.
Uber JVM Profiler
Geschnürt mit erweiterten Profilierungsfunktionen, Uber JVM-Profiler ist eine weitere gute Option für Ihre Java-basierten Anwendungen.
Es bietet einen Java-Agenten, der mehrere Stapelspuren und Metriken für Spark / Hadoop-JVM-Prozesse auf verteilte Weise sammelt, z. B. Speicher- / CPU- / E / A-Metriken.
Das Tool kann Java-Argumente und -Methoden für Benutzercodes verfolgen, ohne sie zu ändern. Sie können es auch verwenden, um die Anruflatenz von HDFS-Namensknoten für jede Spark-App zu verfolgen und Probleme zu finden. Es kann sogar die HDFS-Dateipfade der Spark-App verfolgen, um heiße Dateien herauszufinden und weitere Optimierungen durchzuführen.
Uber JVM Profiler wurde ursprünglich erstellt, um Spark-Apps zu profilieren, die im Allgemeinen viele Computer oder Prozesse für eine Anwendung enthalten. Daher können Benutzer 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 jeden Ihrer JVM-Prozesse verwenden. Seine Eigenschaften umfassen:
- Debuggen der Speichernutzung von Spark-App-Executoren, z. B. Java-Heapspeicher, nativer Speicher, Nicht-Heapspeicher, Pufferpool und Speicherpool
- Debuggen der CPU-Auslastung und der Garbage Collection-Zeit
- Debuggen von Java-Klassenmethoden für Häufigkeit und Zeit oder Dauerprofilierung
- Argument Profiling (Debuggen und Verfolgen des Java-Klassenmethodenaufrufs und seines Argumentwerts)
- Stacktrack Profiling & Generieren von Flamegraphs für die CPU-Zeit
- Debuggen von E / A-Metriken und JVM-Thread-Metriken
Tracy
Tracy ist ein nützliches Tool, mit dem Entwickler PHP-Programme einfach debuggen können. Es verfügt über ein benutzerfreundliches Design und erweiterte Funktionen wie CLI-Unterstützung, Debuggen von AJAX-Aufrufen und mehr.
Es kann Fehler schnell finden und korrigieren, Variablen sichern, Fehler protokollieren, den Speicherverbrauch visualisieren und die Ausführungszeit von Abfragen oder Skripten bestimmen. Durch die Verwendung von Farbcodierungs- und Hervorhebungsproblemen in Rot mit klaren Erklärungen können Sie Ausnahmen und Fehler leicht visualisieren und verstehen.
Tracy verfügt über Protokollierungsfunktionen und eine automatische Erkennung der Umgebung. 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 umfangreiche interaktive Visualisierungen für die verschiedenen Merkmale Ihres Python-Programms, wie z. B. Speichernutzung und Laufzeit.
Es ist unter einer BSD-Lizenz erhältlich 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 Auswirkungen auf das Problem haben Endbenutzererfahrung.
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 am häufigsten verwendet werden.
Name | Sprachen |
Py-Spion | Python |
Pyroskop | Python, Rubin, Los |
Blasenprof | Node.js |
Pyinstrument | Python |
Xdebug | PHP |
SPX | PHP |
Vorsilbe | Python, .NET, Java, Node.js, Rubin, PHP |
Scalene | Python |
VisualVM | Java |
Orbit-Profiler | C, C ++ |
Uber JVM-Profiler | Java |
Tracy | PHP |
vprof | Python |