Comment visualiser les performances de votre application avec un graphique de flamme SVG

Publié: 2023-02-21

Les graphiques de flamme SVG sont un excellent moyen de visualiser les performances de votre application. En affichant le temps passé dans chaque fonction, vous pouvez rapidement identifier les zones de votre code qui prennent trop de temps. Pour afficher un graphe de flamme SVG, vous devrez utiliser un outil capable d'en générer un. Il existe de nombreux outils open source disponibles, tels que flamegraph.io. Une fois que vous avez généré votre graphique de flamme, vous pouvez l'intégrer dans votre site Web ou votre blog à l'aide d'une balise. Vous pouvez également utiliser un outil comme Google Sheets pour afficher votre graphique de flamme. Créez simplement une nouvelle feuille de calcul, sélectionnez "Insérer> Image", puis collez l'URL de votre graphique de flamme.

Comment exécutez-vous un graphique de flamme ?

Comment exécutez-vous un graphique de flamme ?
Image par: badawi.io

Afin d'exécuter un graphique de flamme, vous devez avoir quelques éléments installés sur votre ordinateur. La première chose dont vous avez besoin est le navigateur Google Chrome. Ensuite, vous devez installer l'extension Flame Graph. Une fois ces deux éléments installés, vous devez ouvrir le navigateur Google Chrome et accéder à la page d'extension Flame Graph . À partir de là, vous devrez cliquer sur le bouton "Créer un nouveau graphique de flamme". Cela fera apparaître un nouvel onglet dans lequel vous devrez entrer l'URL du site Web pour lequel vous souhaitez créer un graphique de flamme. Une fois que vous avez entré l'URL, vous devrez cliquer sur le bouton "Créer un graphique de flamme". Cela prendra quelques instants pour créer le graphique de la flamme. Une fois terminé, vous pourrez voir les résultats.

Le graphique de flamme affiche une trace de demande distribuée et un résumé de chaque appel de service qui s'est produit pendant l'exécution de la demande. Les graphiques de flamme des traces distribuées affichent les données de latence et d'erreur pour aider les développeurs à identifier les goulots d'étranglement dans leurs applications. L'article fournit une explication sur la façon d'interpréter un graphique de flamme ainsi qu'un exemple, ainsi que d'autres méthodes pour tracer des traces distribuées. L'axe Y affiche la profondeur de la pile d'appels (le nombre d'appels). Lorsque vous cliquez sur une étendue sur un graphique de flamme, vous verrez généralement un résumé de la durée et de l'erreur associée à l'appel. Vous pouvez trouver des métriques, des journaux, des données de performances réseau, des points chauds de code et d'autres informations contextuelles en cliquant sur les onglets sous le graphique de la flamme. Le diagramme en spirale est formé par un cercle entouré d'un ensemble d'anneaux. Les graphiques de flamme peuvent être utilisés pour visualiser les méthodes et les chemins de code utilisés pour répondre à une demande d'un profileur de code. Les outils Datadog Application Performance Monitoring et Distribution tracing vous permettent de suivre le chemin de toutes les requêtes sur tous les services.

Les graphiques de flamme offrent aux développeurs un moyen simple et rapide de voir les problèmes de performances

Les graphiques de flamme peuvent être utilisés par les développeurs pour visualiser les performances des applications distribuées en quelques secondes. Les graphiques de flamme peuvent aider les développeurs à identifier et à corriger les problèmes de performances en fournissant une représentation graphique de la trace de la demande et en mettant en évidence les problèmes rencontrés par l'application.

Comment recherchez-vous sur Flamegraph ?

Vous pouvez effectuer une recherche sur Flamegraph de différentes manières. Une façon consiste à utiliser le champ de recherche situé en haut à droite de l'écran. Cette boîte de recherche vous permet de saisir des mots-clés qui seront ensuite utilisés pour rechercher le flamegraph. Une autre façon de rechercher sur flamegraph consiste à utiliser la fonction de navigation. Cette fonction se trouve sur le côté gauche de l'écran. Cette fonction vous permet de parcourir les différentes catégories de flamegraph.

Avec l'avènement des graphiques de flammes, il est maintenant plus facile de les rechercher. Il y a un chemin de code d'écriture sous le grand cadre TCP_send() à droite. Si vous cliquez sur l'un des cadres en surbrillance, vous pouvez voir pourquoi cela peut se produire. Tcp_Send était présent dans 59,1 % des échantillons testés. D'autres termes intrigants à rechercher incluent re?cv, spin, copy et x.

Pourquoi s'appelle-t-il un graphique de flamme ?

Lors de la création d'une visualisation, Neelakanth et Roch ont utilisé des couleurs complètement aléatoires. Le processeur était chaud (occupé), ce qui expliquait pourquoi je n'avais choisi que des couleurs chaudes en premier. Parce qu'ils ressemblaient à des flammes, les graphiques de flammes sont rapidement devenus populaires.

Les dangers des flammes

L'événement enflammé est une façon amusante de laisser libre cours à sa frustration et d'entamer une discussion animée. Ils peuvent également conduire à une rupture dans les relations et provoquer la rupture des gens.
La meilleure façon de gérer les flammes est de les ignorer. Quelqu'un peut poster une flamme; vous devriez être celui qui l'ignore. Il n'est pas nécessaire de répondre. Cela ne vaut pas l'énergie dépensée.
La flamme peut être une façon amusante de communiquer, mais elle peut aussi être nocive dans certains cas si elle est mal utilisée. Vous n'avez pas à avoir peur des flammes ; au lieu de cela, vous devriez les éviter et rester calme.

Qui a inventé les Flamegraphs ?

Les graphiques de flamme sont devenus un outil important pour l'analyse des performances dans de nombreuses langues, ainsi que dans Netflix et d'autres industries. Leur auteur, Brendan Gregg, a créé le Flame Graph, qui a été publié dans le numéro de juin 2016 de Communications of the ACM.


Visualiseur de graphique de flamme

Une visionneuse de graphique de flamme est un type de logiciel qui permet aux utilisateurs de visualiser des données sous la forme d'un graphique. Ce logiciel est souvent utilisé pour résoudre des problèmes avec des ordinateurs ou d'autres appareils.

Vous pouvez utiliser speedscope pour consulter des profils de performances volumineux sur le Web. FlameGraphs de Brendan Gregg s'inspire du panneau de performances des outils de développement Chrome. Les données du système ne sont transmises à aucun serveur et s'exécutent entièrement dans le navigateur. Chrome et Firefox devraient fonctionner avec toutes les plates-formes (bien que je n'aie testé que Mac). Dans la vue lourde de gauche, des piles identiques sont regroupées, qu'elles aient été enregistrées ou non de manière séquentielle. La pile de chaque parent est triée de manière à ce que sa pile la plus lourde soit à gauche - d'où l'étiquette gaucher. Une vue détaillée de la situation vous aidera à comprendre où vous en êtes en termes de nombre d'appels de fonction que vous avez dans une situation donnée.

Rudro Samanta utilise speedscope pour visualiser les profils d'application iOS capturés à l'aide de Xcode. Jest est utilisé pour écrire des cas de test, Travis CI est utilisé pour intégrer le code en continu, Coveralls est utilisé pour les rapports de couverture de test, Parcel est utilisé pour transformer le code source et Prettier est utilisé pour formater automatiquement le code. Une façon d'y parvenir est d'augmenter le nombre de formats que speedscope peut importer, et une façon de rendre les intégrations plus étroites. Je travaille sur speedscope depuis neuf mois maintenant, et j'ai l'impression de l'avoir laissé s'éloigner de moi. En tant qu'ingénieur, je m'efforcerai de créer des ensembles de systèmes et d'outils qui soient maintenables, compréhensibles et utiles afin d'aider les gens à résoudre des problèmes complexes partout dans le monde. Je crois que je consacrerai plus de temps aux projets créatifs et collaboratifs cette année.

Flame Graph en ligne

Un graphique de flamme est une représentation graphique des données de profilage, généralement utilisée pour montrer les caractéristiques de performance des programmes logiciels. La hauteur de chaque section représente le temps passé dans cette section de code particulière. Les sections sont classées de gauche à droite selon le moment où elles ont été appelées.

Contrairement aux arbres et aux graphiques, les graphiques de flammes utilisent efficacement l'espace de l'écran en présentant une grande quantité d'informations dans un petit format. En cliquant ici, vous apprendrez comment convertir un arbre en un graphe de flammes, ainsi que quelles sont les principales caractéristiques d'un graphe de flammes. Les Flame Graphs sont utilisés dans Google Cloud Profiler pour afficher les données de profilage. Lorsque vous suivez une pile d'appels, la largeur des trames diminue car le temps CPU total d'un appelé ne peut pas être supérieur au temps CPU d'un autre appelé. La forme de la flamme est causée par ce comportement. Le graphique de la flamme apparaît maintenant comme suit après avoir supprimé les espaces blancs en excès et colorié les images en utilisant le temps CPU. Bien que les piles d'appels pour foo1 et foo2 aient été conservées, la pile qui commençait par foo2 et se terminait par foo1 est maintenant située à côté du cadre.

Comment faire un graphique de flamme ?

Pour générer des graphiques de flamme, vous devez d'abord échantillonner la trace de la pile. Il a traditionnellement été divisé en deux types : les profils système, tels que Linux perf, qui affichent les chemins de code système (par exemple, JVM GC, syscalls, TCP), mais pas les profils Java. Des profileurs JVM, tels que hprof, lJP et des profileurs commerciaux, sont disponibles.

Graphique de flamme vs graphique de flamme

Il existe quelques différences essentielles entre un diagramme de flamme et un graphique de flamme. Un graphique de flamme affiche généralement une chronologie des événements, tandis qu'un graphique de flamme affiche une trace de pile. Les graphiques de flammes sont souvent utilisés pour déboguer les problèmes de performances, tandis que les graphiques de flammes sont plus couramment utilisés pour visualiser les données de performances. Les diagrammes de flammes sont un excellent moyen de voir comment un programme passe son temps. Ils peuvent vous montrer où se trouvent les goulots d'étranglement et comment le programme utilise les ressources. Les graphiques de flamme sont un excellent moyen de voir comment un programme utilise les ressources.

En tant que technique grossière mais utile pour déterminer quels chemins de code sont chauds (parce qu'ils sont occupés sur le processeur), le profilage à un taux fixe donne de bons résultats. Les graphiques de flamme vous permettent d'identifier rapidement les chemins de code à chaud en échantillonnant les traces de la pile. Mes exemples de performances Linux (perf_events) et DTrace sont tous deux des exemples de logiciels que vous pouvez installer. FlameGraph est un outil Perl qui génère un SVG interactif et vous permet de voir les détails par glisser-déposer sur les images. La visualisation peut sembler similaire à celle des autres profileurs, mais elle en diffère à certains égards. Parce que cela a été initialement utilisé pour visualiser ce qui est chaud sur le CPU, on l'a appelé un graphique de flamme. Consultez la section eBPF profile(8) pour une méthode d'exécution moins coûteuse dans les nouveaux noyaux Linux (le profil eBPF(8) n'est pas recommandé).

Veuillez consulter la section Flame Graphs de ma page perf_events pour plus d'informations sur les performances. Il est possible de générer une sortie pliée directement à partir du rapport de performances de Linux 4.5 en incluant un mode plié, qui n'est accessible qu'en utilisant stackcollapse-perf.pl. Un lint de noyau (-a) et d'utilisateur (-d) séparés par des piles d'utilisateur et de noyau (-f) est fourni dans cet exemple à 99 Hertz (-F 99), et il y a une limite de temps de 60 secondes pour les échantillons. Les graphiques de flamme peuvent être générés en utilisant SystemTap v1.7 dans Fedora 16. Le minuteur peut également être utilisé pour échantillonner les traces de pile. Cette sonde de profil s'exécute à la fréquence d'horloge du système (CONFIG_HZ). SystemTap peut utiliser sa fonction d'agrégation systemTap pour agréger le noyau et transmettre un rapport (moins détaillé) aux utilisateurs.

Les graphiques ont été générés à l'aide de KVM (hôte Ubuntu) (32 bits) sur un invité Fedora 16 (avec un processeur virtuel). Sur bare metal, certains chemins de code et ratios d'échantillonnage seront très différents. Il est possible de cliquer sur des éléments dans les données de profilage pour voir les pourcentages (mais pas cliquer pour zoomer, car il s'agit d'une nouvelle version), mais pas pour zoomer. Le graphique est un excellent outil pour en savoir plus sur les composants internes de Linux. Sur un hôte d'hyperviseur de noyau illumos, l'utilisateur et la pile de noyau peuvent être vus dans cet exemple. Les versions autonomes SVG et PNG sont également disponibles. Afin d'observer comment le temps du noyau est alloué à la création de processus de courte durée, j'ai effectué une charge de travail de ce graphique de flamme.

Un graphique de flamme est généralement utilisé pour identifier la charge d'interruption du noyau en affichant les cheveux. L'équilibrage NUMA dans la version 1716 d'Ubuntu consomme plus de la moitié des cycles du processeur afin d'équilibrer la mémoire entre les nœuds, ce qui entraîne une performance lente. Une réécriture du graphe de flamme dans D3 est essentielle pour maintenir les ordres de fusion constants sans avoir à régénérer le graphe de flamme. Dans ma conférence JavaOne 2016 Java Performance Analysis on Linux with Flame Graphs, je couvre les techniques les plus récentes pour produire des graphiques de flamme en mode mixte à l'aide de Linux perf. JDK8u60 inclut une fonctionnalité appelée /PreservePointerFrame qui vous permet de générer des graphiques de performances et de flamme. JDK-8068945 a été ajouté à la bibliothèque JDK en tant que correctif pour le profilage de pile (pointeur de cadre). Lors de l'utilisation du registre RBP comme pointeur de trame dans le code compilé pour x64, il est considéré comme le pointeur de trame approprié.

Lors de l'exécution de DTrace en tant que méthode Jstack, il peut suivre les piles au niveau de l'utilisateur ainsi que les méthodes et les classes Java. Pour les programmes Java, Stackcollapse.pl et flamegraph.pl sont utilisés pour générer des graphiques de flamme CPU . Certaines versions de JVM ne prennent pas en charge ustack helper, qui pose un certain nombre de problèmes. Cela fonctionne avec n'importe quelle combinaison de trace de pile et de valeur, pas seulement avec les traces de pile avec le nombre de CPU. Le premier problème est que Jstack() peut ne pas être en mesure de parcourir correctement les piles en raison du bogue JDK-6260864, ​​qui a été déposé en 2005 et n'est toujours pas corrigé en 2014. Ce bogue fait que la majorité des exemples de piles dans mes charges de travail de production casser. Vous pouvez avoir un aperçu de l'allocation de mémoire de l'appareil, des E/S de l'appareil, des modèles d'appel système, des événements hors CPU et des appels de fonction spécifiques. Si l'un d'entre eux est utilisé, une trace de pile peut être obtenue avec la valeur appropriée : décompte, octets ou latence. Les graphiques de flamme peuvent également être consultés sur la page Flame Graphs.

Flamme graphique Java

Un graphique de flamme est un type de visualisation de données utilisé pour représenter les performances d'un logiciel. C'est un graphique qui montre le temps qu'un programme passe dans chaque fonction. La hauteur des barres représente le temps que le programme passe dans cette fonction. La largeur des barres représente le temps que le programme passe dans cette fonction par rapport aux autres fonctions.

Les graphiques de flamme sont récemment apparus comme une nouvelle façon populaire de visualiser l'utilisation du processeur en Java. Ils peuvent être créés à l'aide du profileur Java léger de Google (code.google.com) et de mon logiciel de graphe de flamme (github). C'est une bonne chose que les graphiques de flamme ne soient pas une fonctionnalité distincte des profileurs Java à l'avenir. Dans cet article de blog, nous examinerons une méthode JVMTI basée sur Java uniquement qui, bien qu'elle fonctionne, présente certaines limitations. Jeremy Manson a créé un profileur Java léger qui peut être utilisé pour échantillonner le processeur. Cet exemple de rapport est généré au démarrage de Java jusqu'à sa fermeture, avec un fichier trace.txt en annexe. Pour exécuter le programme, il y a quelques coûts.

Pour mon programme, c'était mineur (une augmentation de seulement 1% du taux de requête et une augmentation de 7% de la consommation CPU). Si le taux d'échantillonnage doit être réduit, veuillez consulter les sections suivantes. La sortie du programme flamegraph.pl peut être personnalisée avec une variété d'options (liste -h), y compris le titre. Le profileur honnête de Richard Warburton, basé sur la même technique de profilage, est également utile. Il est possible que je réduise le taux d'échantillonnage de 100 hertz à 50 hertz ou moins si j'ai l'intention de collecter de grandes quantités de données sur une longue période.