So visualisieren Sie die Leistung Ihrer Anwendung mit einem SVG-Flammendiagramm

Veröffentlicht: 2023-02-21

SVG- Flammendiagramme sind eine großartige Möglichkeit, die Leistung Ihrer Anwendung zu visualisieren. Indem Sie die für jede Funktion aufgewendete Zeit anzeigen, können Sie schnell Bereiche Ihres Codes identifizieren, die zu viel Zeit in Anspruch nehmen. Um ein SVG-Flammendiagramm anzuzeigen, müssen Sie ein Tool verwenden, das eines erzeugen kann. Es sind viele Open-Source-Tools verfügbar, wie z. B. flamegraph.io. Nachdem Sie Ihr Flammendiagramm erstellt haben, können Sie es mithilfe eines Tags in Ihre Website oder Ihren Blog einbetten. Sie können auch ein Tool wie Google Sheets verwenden, um Ihr Flammendiagramm anzuzeigen. Erstellen Sie einfach eine neue Tabelle, wählen Sie „Einfügen > Bild“ und fügen Sie dann die URL Ihres Flammendiagramms ein.

Wie führt man ein Flammendiagramm aus?

Wie führt man ein Flammendiagramm aus?
Bild von: badawi.io

Um ein Flammendiagramm auszuführen, müssen einige Dinge auf Ihrem Computer installiert sein. Das erste, was Sie brauchen, ist der Google Chrome-Browser. Als nächstes müssen Sie die Flame Graph-Erweiterung installieren. Sobald Sie diese beiden Dinge installiert haben, müssen Sie den Google Chrome-Browser öffnen und zur Flame Graph-Erweiterungsseite gehen. Von dort aus müssen Sie auf die Schaltfläche „Neues Flammendiagramm erstellen“ klicken. Dadurch wird eine neue Registerkarte geöffnet, auf der Sie die URL der Website eingeben müssen, für die Sie ein Flammendiagramm erstellen möchten. Nachdem Sie die URL eingegeben haben, müssen Sie auf die Schaltfläche „Create Flame Graph“ klicken. Das Erstellen des Flammendiagramms dauert einige Augenblicke. Sobald es fertig ist, können Sie die Ergebnisse sehen.

Das Flame-Diagramm zeigt eine Ablaufverfolgung der verteilten Anfrage und eine Zusammenfassung jedes Serviceaufrufs, der während der Ausführung der Anfrage aufgetreten ist. Flammendiagramme von verteilten Ablaufverfolgungen zeigen Latenz- und Fehlerdaten, um Entwicklern zu helfen, Engpässe in ihren Anwendungen zu identifizieren. Der Artikel enthält eine Erläuterung zur Interpretation eines Flammendiagramms sowie ein Beispiel und andere Methoden zum Verfolgen verteilter Spuren. Die Y-Achse zeigt die Tiefe des Aufrufstapels (die Anzahl der Aufrufe). Wenn Sie in einem Flame-Diagramm auf eine Spanne klicken, sehen Sie normalerweise eine Zusammenfassung der Dauer und des mit dem Anruf verbundenen Fehlers. Sie finden Metriken, Protokolle, Netzwerkleistungsdaten, Code-Hotspots und andere kontextbezogene Informationen, indem Sie auf die Registerkarten unter dem Flammendiagramm klicken. Das Spiraldiagramm besteht aus einem Kreis, der von einer Reihe von Ringen umgeben ist. Flammendiagramme können verwendet werden, um die Methoden und Codepfade zu visualisieren, die bei der Erfüllung einer Anfrage von einem Code-Profiler verwendet werden. Mit den Tools Datadog Application Performance Monitoring und Distribution Tracing können Sie den Pfad aller Anforderungen über alle Dienste hinweg verfolgen.

Flame-Diagramme bieten Entwicklern eine schnelle und einfache Möglichkeit, Leistungsprobleme zu erkennen

Flammendiagramme können von Entwicklern verwendet werden, um die Leistung verteilter Anwendungen in Sekundenschnelle zu visualisieren. Flame-Diagramme können Entwicklern helfen, Leistungsprobleme zu identifizieren und zu beheben, indem sie eine grafische Darstellung der Anforderungsverfolgung bereitstellen und hervorheben, wo die Anwendung auf Probleme gestoßen ist.

Wie suchen Sie auf Flamegraph?

Es gibt verschiedene Möglichkeiten, wie Sie im Flamegraph suchen können. Eine Möglichkeit besteht darin, das Suchfeld oben rechts auf dem Bildschirm zu verwenden. In dieses Suchfeld können Sie Schlüsselwörter eingeben, die dann zum Durchsuchen des Flammendiagramms verwendet werden. Eine andere Möglichkeit, auf Flammengraphen zu suchen, ist die Verwendung der Suchfunktion. Diese Funktion finden Sie auf der linken Seite des Bildschirms. Mit dieser Funktion können Sie durch die verschiedenen Kategorien von Flammengraphen blättern.

Mit dem Aufkommen von Flammendiagrammen ist es jetzt einfacher, sie zu durchsuchen. Unter dem großen TCP_send()-Rahmen auf der rechten Seite befindet sich ein Schreibcodepfad. Wenn Sie auf einen der hervorgehobenen Rahmen klicken, können Sie sehen, warum dies der Fall sein könnte. Tcp_Send war in 59,1 % der getesteten Proben vorhanden. Andere interessante Begriffe, nach denen Sie Ausschau halten sollten, sind re?cv, spin, copy und x.

Warum wird es ein Flammendiagramm genannt?

Bei der Erstellung einer Visualisierung verwendeten Neelakanth und Roch völlig zufällige Farben. Die CPU war heiß (beschäftigt), was erklärt, warum ich zuerst nur warme Farben gewählt habe. Da es Flammen ähnelte, wurden Flammendiagramme schnell populär.

Die Gefahren der Flammen

Das feurige Event ist eine unterhaltsame Möglichkeit, Frust loszulassen und eine lebhafte Diskussion zu beginnen. Sie können auch zu einem Zusammenbruch von Beziehungen führen und dazu führen, dass Menschen auseinanderbrechen.
Der beste Weg, mit Flammen umzugehen, ist, sie zu ignorieren. Jemand kann eine Flamme posten; du solltest derjenige sein, der es ignoriert. Es besteht keine Notwendigkeit zu reagieren. Es ist die aufgewendete Energie nicht wert.
Flammen können eine lustige Art der Kommunikation sein, aber sie können in einigen Fällen auch schädlich sein, wenn sie falsch verwendet werden. Sie müssen keine Angst vor Flammen haben; Stattdessen sollten Sie sie vermeiden und ruhig bleiben.

Wer hat Flammengraphen erfunden?

Flammendiagramme sind in vielen Sprachen sowie in Netflix und anderen Branchen zu einem wichtigen Werkzeug für die Leistungsanalyse geworden. Ihr Autor, Brendan Gregg, erstellte das Flammendiagramm, das in der Juni-Ausgabe 2016 von Communications of the ACM veröffentlicht wurde.


Flame Graph Viewer

Ein Flammendiagramm-Viewer ist eine Art von Software, mit der Benutzer Daten in Form eines Diagramms visualisieren können. Diese Software wird häufig verwendet, um Probleme mit Computern oder anderen Geräten zu beheben.

Mit speedscope können Sie webbasiert große Leistungsprofile betrachten. FlameGraphs von Brendan Gregg wurde vom Leistungsbereich der Chrome-Entwicklertools inspiriert. Daten aus dem System werden an keine Server weitergegeben und es läuft vollständig im Browser. Chrome und Firefox sollten mit allen Plattformen funktionieren (obwohl ich nur Mac getestet habe). In der linken oberen Ansicht werden identische Stapel gruppiert, unabhängig davon, ob sie sequentiell aufgezeichnet wurden. Der Stapel jedes Elternteils wird so sortiert, dass sein schwerster Stapel links ist – daher das Etikett für Linkshänder. Eine detaillierte Ansicht der Situation hilft Ihnen zu verstehen, wo Sie in Bezug auf die Anzahl der Funktionsaufrufe in einer bestimmten Situation stehen.

Rudro Samanta hat Speedscope verwendet, um mit Xcode erfasste iOS-Anwendungsprofile zu visualisieren. Jest wird zum Schreiben von Testfällen verwendet, Travis CI wird zum kontinuierlichen Integrieren von Code verwendet, Coveralls wird zum Berichten über die Testabdeckung verwendet, Parcel wird zum Transformieren von Quellcode verwendet und Prettier wird zum automatischen Formatieren von Code verwendet. Eine Möglichkeit, dies zu erreichen, besteht darin, die Anzahl der Formate zu erhöhen, die speedscope importieren kann, und eine Möglichkeit, die Integration enger zu machen. Ich arbeite jetzt seit neun Monaten an Speedscope und habe das Gefühl, dass ich es von mir gelassen habe. Als Ingenieur werde ich danach streben, Systeme und Toolsets zu erstellen, die wartbar, verständlich und nützlich sind, um Menschen bei der Lösung komplexer Probleme auf der ganzen Welt zu unterstützen. Ich glaube, dass ich dieses Jahr mehr Zeit für kreative und gemeinsame Projekte aufwenden werde.

Flammendiagramm online

Ein Flammendiagramm ist eine grafische Darstellung von Profildaten, die normalerweise verwendet wird, um die Leistungsmerkmale von Softwareprogrammen anzuzeigen. Die Höhe jedes Abschnitts stellt die Zeit dar, die in diesem bestimmten Codeabschnitt verbracht wird. Die Abschnitte sind von links nach rechts nach dem Zeitpunkt ihres Aufrufs geordnet.

Im Gegensatz zu Bäumen und Diagrammen nutzen Flame-Diagramme den Platz auf dem Bildschirm effektiv, indem sie eine große Menge an Informationen in einem kleinen Format darstellen. Wenn Sie hier klicken, erfahren Sie, wie Sie einen Baum in ein Flammendiagramm umwandeln und was die Hauptmerkmale eines Flammendiagramms sind. Flame Graphs werden in Google Cloud Profiler verwendet, um Profildaten anzuzeigen. Wenn Sie einer Aufrufliste folgen, verringern sich die Rahmenbreiten, da die CPU-Gesamtzeit eines Aufgerufenen nicht größer sein kann als die CPU-Zeit eines anderen Aufgerufenen. Die Flammenform wird durch dieses Verhalten verursacht. Das Flammendiagramm sieht jetzt wie folgt aus, nachdem überschüssige Leerzeichen entfernt und Frames mit eigener CPU-Zeit gefärbt wurden. Obwohl die Call-Stacks für foo1 und foo2 erhalten geblieben sind, befindet sich der Stack, der mit foo2 begann und mit foo1 endet, jetzt neben dem Frame.

Wie erstellt man ein Flammendiagramm?

Um Flame-Diagramme zu generieren, müssen Sie zuerst den Stack-Trace abtasten. Es wurde traditionell in zwei Typen unterteilt: Systemprofile wie Linux perf, die Systemcodepfade anzeigen (z. B. JVM GC, Syscalls, TCP), aber keine Java-Profile. JVM-Profiler wie hprof, lJP und kommerzielle Profiler sind verfügbar.

Flammendiagramm vs. Flammendiagramm

Es gibt einige wichtige Unterschiede zwischen einem Flammendiagramm und einem Flammendiagramm. Ein Flammendiagramm zeigt normalerweise eine Zeitleiste von Ereignissen, während ein Flammendiagramm eine Stapelverfolgung zeigt. Flammendiagramme werden häufig zum Debuggen von Leistungsproblemen verwendet, während Flammendiagramme häufiger zum Visualisieren von Leistungsdaten verwendet werden. Flammendiagramme sind eine großartige Möglichkeit, um zu sehen, wie ein Programm seine Zeit verbringt. Sie können Ihnen zeigen, wo Engpässe liegen und wie das Programm Ressourcen verwendet. Flammendiagramme sind eine großartige Möglichkeit, um zu sehen, wie ein Programm Ressourcen verwendet.

Als grobe, aber nützliche Technik zur Bestimmung, welche Codepfade heiß sind (weil sie auf der CPU ausgelastet sind), liefert die Profilerstellung mit fester Rate gute Ergebnisse. Flame-Diagramme ermöglichen es Ihnen, Hot-Code-Pfade schnell zu identifizieren, indem Sie Stack-Traces abtasten. Meine Beispiele für Linux perf (perf_events) und DTrace sind beide Beispiele für Software, die Sie installieren können. FlameGraph ist ein Perl-Tool, das ein interaktives SVG generiert und es Ihnen ermöglicht, Details durch Ziehen und Ablegen über die Bilder zu sehen. Die Visualisierung kann anderen von Profilern ähnlich erscheinen, unterscheidet sich jedoch in gewisser Weise von ihnen. Da dies ursprünglich verwendet wurde, um zu visualisieren, was auf der CPU heiß ist, wurde es als Flammendiagramm bezeichnet. Sehen Sie sich den Abschnitt zum eBPF-Profil (8) an, um eine Methode mit geringerem Overhead zum Ausführen in neueren Linux-Kernels zu finden (das eBPF-Profil (8) wird nicht empfohlen).

Weitere Informationen zu perf finden Sie im Abschnitt „Flammendiagramme“ auf meiner Seite „perf_events“. Es ist möglich, die gefaltete Ausgabe direkt aus dem Linux 4.5-Leistungsbericht auszugeben, indem ein gefalteter Modus eingefügt wird, auf den nur über stackcollapse-perf.pl zugegriffen werden kann. Ein Lint von Kernel (-a) und Benutzer (-d), getrennt durch Benutzer- und Kernel-Stacks (-f), wird in diesem Beispiel bei 99 Hertz (-F 99) bereitgestellt, und es gibt ein Zeitlimit von 60 Sekunden für Beispiele. Flammendiagramme können mit SystemTap v1.7 in Fedora 16 generiert werden. Der Timer kann auch zum Abtasten von Stack-Traces verwendet werden. Dieser Profiltest wird mit der Systemtaktrate (CONFIG_HZ) ausgeführt. SystemTap kann seine systemTap-Aggregationsfunktion verwenden, um In-Kernel zu aggregieren und einen (weniger detaillierten) Bericht an Benutzer weiterzugeben.

Die Diagramme wurden mit KVM (Ubuntu-Host) (32 Bit) auf einem Fedora 16-Gast (mit einer virtuellen CPU) generiert. Auf Bare Metal werden einige Codepfade und Sample-Verhältnisse sehr unterschiedlich sein. Es ist möglich, auf Elemente in den Profildaten zu klicken, um Prozentsätze anzuzeigen (aber nicht zum Zoomen, da dies eine neue Version ist), aber nicht hineinzuzoomen. Das Diagramm ist ein hervorragendes Werkzeug, um mehr über die Interna von Linux zu erfahren. Auf einem illumos-Kernel-Hypervisor-Host sind in diesem Beispiel sowohl der Benutzer- als auch der Kernel-Stack zu sehen. Die eigenständigen SVG- und PNG-Versionen sind ebenfalls verfügbar. Um zu beobachten, wie die Kernelzeit dem Erstellen kurzlebiger Prozesse zugewiesen wird, habe ich eine Arbeitslast dieses Flammendiagramms ausgeführt.

Ein Flammendiagramm wird normalerweise verwendet, um die Kernel-Interrupt-Last durch Anzeigen von Haaren zu identifizieren. Der NUMA-Ausgleich in Ubuntu-Version 1716 verbraucht mehr als die Hälfte der CPU-Zyklen, um den Speicher zwischen Knoten auszugleichen, was zu einer langsamen Leistung führt. Ein Neuschreiben des Flammendiagramms in D3 ist wesentlich, um die Zusammenführungsbefehle konstant zu halten, ohne das Flammendiagramm regenerieren zu müssen. In meinem JavaOne 2016-Vortrag Java Performance Analysis on Linux with Flame Graphs behandle ich die neuesten Techniken zur Erstellung von Flame-Graphen im gemischten Modus mit Linux perf. JDK8u60 enthält eine Funktion namens /PreservePointerFrame, mit der Sie Leistungs- und Flammendiagramme erstellen können. JDK-8068945 wurde der JDK-Bibliothek als Hot Patch für Stack-Profiling (Frame-Zeiger) hinzugefügt. Wenn das RBP-Register als Frame-Zeiger im kompilierten Code für x64 verwendet wird, wird es als der richtige Frame-Zeiger angesehen.

Wenn DTrace als Jstack-Methode ausgeführt wird, kann es Stacks auf Benutzerebene sowie Java-Methoden und -Klassen verfolgen. Für Java-Programme werden Stackcollapse.pl und flamegraph.pl verwendet, um CPU-Flame-Graphen zu generieren. Einige JVM-Versionen unterstützen den ustack-Helfer nicht, der eine Reihe von Problemen hat. Es funktioniert mit jeder Stack-Trace-Plus-Wert-Kombination, nicht nur Stack-Traces mit CPU-Zählungen. Das erste Problem ist, dass Jstack() aufgrund des Fehlers JDK-6260864, ​​der 2005 eingereicht wurde und seit 2014 immer noch nicht behoben ist, möglicherweise nicht in der Lage ist, Stacks ordnungsgemäß zu durchlaufen. Dieser Fehler verursacht die Mehrheit der Beispielstapel in meinen Produktions-Workloads brechen. Sie könnten Einblick in die Speicherzuweisung des Geräts, Geräte-E/A, Syscall-Muster, Off-CPU-Ereignisse und bestimmte Funktionsaufrufe erhalten. Wenn eines davon verwendet wird, kann ein Stack-Trace mit dem entsprechenden Wert abgerufen werden: Anzahl, Bytes oder Latenz. Flammendiagramme können auch auf der Seite Flammendiagramme angezeigt werden.

Flammendiagramm Java

Ein Flammendiagramm ist eine Art Datenvisualisierung, die verwendet wird, um die Leistung eines Softwareprogramms darzustellen. Es ist ein Diagramm, das die Zeit zeigt, die ein Programm in jeder Funktion verbringt. Die Höhe der Balken stellt die Zeit dar, die das Programm in dieser Funktion verbringt. Die Breite der Balken stellt die Zeit dar, die das Programm in dieser Funktion relativ zu den anderen Funktionen verbringt.

Flammendiagramme haben sich in letzter Zeit zu einer beliebten neuen Methode entwickelt, um die CPU-Auslastung in Java zu visualisieren. Sie können mit dem leichtgewichtigen Java-Profiler von Google (code.google.com) und meiner Flame-Graph-Software (github) erstellt werden. Es ist gut, dass Flammendiagramme in Zukunft kein separates Feature von Java-Profilern sein werden. In diesem Blogbeitrag sehen wir uns eine reine Java-JVMTI-basierte Methode an, die zwar funktioniert, aber einige Einschränkungen hat. Jeremy Manson hat einen leichtgewichtigen Java-Profiler erstellt, der zum Abtasten der CPU verwendet werden kann. Dieser Beispielbericht wird generiert, wenn Java gestartet wird, bis es beendet wird, wobei eine trace.txt-Datei angehängt wird. Für den Betrieb des Programms fallen einige Kosten an.

Für mein Programm war es geringfügig (ein Anstieg von nur 1 % bei der Anforderungsrate und ein Anstieg von 7 % beim CPU-Verbrauch). Falls die Abtastrate reduziert werden soll, siehe nachfolgende Abschnitte. Die Ausgabe des Programms flamegraph.pl kann mit einer Vielzahl von Optionen angepasst werden (list -h), einschließlich des Titels. Hilfreich ist auch Richard Warburtons Honour-Profiler, der auf der gleichen Profiling-Technik basiert. Es ist möglich, dass ich die Abtastrate von 100 Hertz auf 50 Hertz oder weniger reduziere, wenn ich beabsichtige, große Datenmengen über einen längeren Zeitraum zu sammeln.