Cum să vizualizați performanța aplicației dvs. cu un grafic SVG Flame

Publicat: 2023-02-21

Graficele de flacără SVG sunt o modalitate excelentă de a vizualiza performanța aplicației dvs. Afișând timpul petrecut în fiecare funcție, puteți identifica rapid zonele din codul dvs. care ocupă prea mult timp. Pentru a afișa un grafic de flacără SVG, va trebui să utilizați un instrument care poate genera unul. Există multe instrumente open source disponibile, cum ar fi flamegraph.io. Odată ce ați generat graficul flăcării, îl puteți încorpora în site-ul dvs. web sau blog folosind o etichetă. De asemenea, puteți utiliza un instrument precum Foi de calcul Google pentru a afișa graficul de flacără. Pur și simplu creați o nouă foaie de calcul, selectați „Inserare > Imagine”, apoi inserați adresa URL a graficului dvs. de flacără.

Cum rulezi un grafic Flame?

Cum rulezi un grafic Flame?
Imagine de: badawi.io

Pentru a rula un grafic de flacără, trebuie să aveți câteva lucruri instalate pe computer. Primul lucru de care aveți nevoie este browserul Google Chrome. Apoi, trebuie să instalați extensia Flame Graph. După ce ați instalat ambele aceste lucruri, trebuie să deschideți browserul Google Chrome și să accesați pagina cu extensia Flame Graph . De acolo, va trebui să faceți clic pe butonul „Creați un nou grafic Flame”. Aceasta va afișa o nouă filă în care va trebui să introduceți adresa URL a site-ului web pentru care doriți să creați un grafic de flacără. Odată ce ați introdus adresa URL, va trebui să faceți clic pe butonul „Creare Flame Graph”. Acest lucru va dura câteva momente pentru a crea graficul flăcării. Odată ce este terminat, veți putea vedea rezultatele.

Graficul flacără afișează o urmă de cerere distribuită și un rezumat al fiecărui apel de serviciu care a avut loc în timpul executării cererii. Graficele de flacără ale urmelor distribuite arată date despre latență și erori pentru a ajuta dezvoltatorii să identifice blocajele din aplicațiile lor. Articolul oferă o explicație a modului de interpretare a unui grafic de flacără, precum și un exemplu, precum și alte metode de urmărire a urmelor distribuite. Axa Y afișează adâncimea stivei de apeluri (numărul de apeluri). Când faceți clic pe un interval de pe un grafic de flacără, veți vedea de obicei un rezumat al duratei și al erorii asociate apelului. Puteți găsi valori, jurnale, date de performanță a rețelei, puncte de acces de cod și alte informații contextuale făcând clic pe filele de sub graficul de flacără. Diagrama spirală este formată dintr-un cerc înconjurat de un set de inele. Graficele de flacără pot fi utilizate pentru a vizualiza metodele și căile de cod utilizate în îndeplinirea unei cereri de la un profiler de cod. Instrumentele de monitorizare a performanței aplicației Datadog și de urmărire a distribuției vă permit să urmăriți traseul tuturor solicitărilor în toate serviciile.

Graficele Flame oferă dezvoltatorilor o modalitate rapidă și ușoară de a vedea problemele de performanță

Graficele Flame pot fi folosite de dezvoltatori pentru a vizualiza performanța aplicațiilor distribuite în câteva secunde. Graficele Flame pot ajuta dezvoltatorii să identifice și să corecteze problemele de performanță, oferind o reprezentare grafică a urmăririi cererii și evidențiind unde aplicația a avut probleme.

Cum cauti pe Flamegraph?

Există câteva moduri diferite în care puteți căuta pe flamegraph. O modalitate este să utilizați caseta de căutare care se află în partea dreaptă sus a ecranului. Această casetă de căutare vă permite să introduceți cuvinte cheie care vor fi apoi folosite pentru a căuta în flamegraph. O altă modalitate de a căuta pe flamegraph este să utilizați funcția de navigare. Această funcție poate fi găsită în partea stângă a ecranului. Această funcție vă permite să navigați prin diferitele categorii de flamegraph.

Odată cu apariția graficelor de flacără, acum este mai ușor să le cauți. Există o cale de scriere a codului sub cadrul mare TCP_send() din dreapta. Dacă faceți clic pe unul dintre cadrele evidențiate, puteți vedea de ce s-ar putea întâmpla acest lucru. Tcp_Send a fost prezent în 59,1% dintre probele testate. Alți termeni intriganți de căutat includ re?cv, spin, copy și x.

De ce se numește Flame Graph?

Când au creat o vizualizare, Neelakanth și Roch au folosit culori complet aleatorii. CPU era fierbinte (ocupat), ceea ce a explicat de ce am ales mai întâi doar culori calde. Pentru că semăna cu flăcări, graficele cu flăcări au devenit rapid populare.

Pericolele Flăcărilor

Evenimentul înflăcărat este o modalitate distractivă de a elibera frustrarea și de a începe o discuție plină de viață. Ele pot duce, de asemenea, la o rupere a relațiilor și pot determina oamenii să se destrame.
Cel mai bun mod de a face față flăcărilor este să le ignori. Cineva poate posta o flacără; ar trebui să fii cel care îl ignoră. Nu este nevoie să răspunzi. Nu merită energia cheltuită.
Flacăra poate fi o modalitate distractivă de a comunica, dar poate fi și dăunătoare în unele cazuri dacă este folosită incorect. Nu trebuie să vă fie frică de flăcări; in schimb, ar trebui sa le eviti si sa ramai calm.

Cine a inventat Flamegraphs?

Graficele Flame au devenit un instrument important pentru analiza performanței în multe limbi, precum și în Netflix și alte industrii. Autorul lor, Brendan Gregg, a creat Flame Graph, care a fost publicat în numărul din iunie 2016 al revistei Communications of the ACM.


Vizualizator Flame Graph

Un vizualizator de grafic de flacără este un tip de software care permite utilizatorilor să vizualizeze datele sub forma unui grafic. Acest software este adesea folosit pentru a depana probleme cu computere sau alte dispozitive.

Puteți utiliza speedscope pentru a analiza profiluri mari de performanță într-un mod bazat pe web. FlameGraphs de Brendan Gregg a fost inspirat de panoul de performanță al instrumentelor pentru dezvoltatori Chrome. Datele din sistem nu sunt transmise niciunui server și rulează complet în browser. Chrome și Firefox ar trebui să funcționeze cu toate platformele (deși am testat doar Mac). În vizualizarea grea din stânga, stivele identice sunt grupate, indiferent dacă au fost înregistrate secvenţial. Teancul fiecărui părinte este sortat astfel încât cel mai greu teanc să fie în stânga – de unde eticheta pentru stânga. O vedere detaliată a situației vă va ajuta să înțelegeți unde vă aflați în ceea ce privește câte apeluri de funcție aveți într-o anumită situație.

Rudro Samanta a folosit Speedscope pentru a vizualiza profilurile aplicațiilor iOS capturate folosind Xcode. Jest este folosit pentru a scrie cazuri de testare, Travis CI este folosit pentru a integra codul continuu, Coveralls este folosit pentru raportarea acoperirii testelor, Parcel este folosit pentru a transforma codul sursă și Prettier este folosit pentru formatarea automată a codului. O modalitate de a realiza acest lucru este de a crește numărul de formate pe care Speedscope le poate importa și o modalitate de a face integrările mai strânse. Lucrez la Speedscope de nouă luni și simt că l-am lăsat să scape de mine. În calitate de inginer, mă voi strădui să creez sisteme și seturi de instrumente care pot fi întreținute, ușor de înțeles și utile pentru a ajuta oamenii să rezolve probleme complexe din întreaga lume. Cred că anul acesta voi dedica mai mult timp proiectelor creative și colaborative.

Flame Graph Online

Un grafic de flacără este o reprezentare grafică a datelor de profilare, utilizată de obicei pentru a arăta caracteristicile de performanță ale programelor software. Înălțimea fiecărei secțiuni reprezintă cantitatea de timp petrecută în acea secțiune specială de cod. Secțiunile sunt ordonate de la stânga la dreapta în funcție de momentul în care au fost apelate.

Spre deosebire de copaci și grafice, graficele de flacără folosesc spațiul ecranului în mod eficient, prezentând o cantitate mare de informații într-un format mic. Făcând clic aici, veți învăța cum să convertiți un copac într-un grafic de flacără, precum și care sunt caracteristicile cheie ale unui grafic de flacără. Flame Graphs sunt folosite în Google Cloud Profiler pentru a afișa datele de profilare. Când urmați o stivă de apeluri, lățimea cadrelor scade, deoarece timpul total CPU al unui apelat nu poate fi mai mare decât timpul CPU al altui apelat. Forma flăcării este cauzată de acest comportament. Graficul de flacără apare acum după cum urmează după eliminarea excesului de spațiu alb și a cadrelor de colorat folosind timpul CPU propriu. Chiar dacă stivele de apeluri pentru foo1 și foo2 au fost păstrate, stiva care a început cu foo2 și se termină cu foo1 este acum situată lângă cadru.

Cum faci un grafic al flăcării?

Pentru a genera grafice de flacără, trebuie mai întâi să eșantionați urma stivei. În mod tradițional, a fost împărțit în două tipuri: profiluri de sistem, cum ar fi Linux perf, care arată căile codului de sistem (de exemplu, JVM GC, syscalls, TCP), dar nu profiluri Java. Sunt disponibili profilerii JVM, cum ar fi hprof, lJP și profilerii comerciali.

Graficul flăcării vs graficul flăcării

Există câteva diferențe cheie între o diagramă a flăcării și un grafic a flăcării. O diagramă cu flacără arată de obicei o linie temporală a evenimentelor, în timp ce un grafic cu flacără arată o urmă de stivă. Diagramele de flacără sunt adesea folosite pentru a depana problemele de performanță, în timp ce graficele de flacără sunt utilizate mai frecvent pentru a vizualiza datele de performanță. Diagramele de flacără sunt o modalitate excelentă de a vedea cum își petrece timpul un program. Ele vă pot arăta unde sunt blocajele și cum folosește programul resursele. Graficele flacără sunt o modalitate excelentă de a vedea modul în care un program utilizează resursele.

Fiind o tehnică grosieră, dar utilă pentru a determina ce căi de cod sunt fierbinți (pentru că sunt ocupate pe CPU), profilarea la o rată fixă ​​dă rezultate bune. Graficele flacără vă permit să identificați rapid căile de cod fierbinte prin eșantionarea urmelor stivei. Exemplele mele Linux perf (perf_events) și DTrace sunt ambele exemple de software pe care le puteți instala. FlameGraph este un instrument Perl care generează un SVG interactiv și vă permite să vedeți detalii prin glisare și plasare peste imagini. Vizualizarea poate părea similară cu altele de la profileri, dar diferă de ei în anumite privințe. Deoarece acesta a fost folosit inițial pentru a vizualiza ceea ce este fierbinte pe procesor, a fost denumit un grafic de flacără. Consultați secțiunea profil eBPF(8) pentru o metodă de rulare mai redusă în nuclee Linux mai noi (profilul eBPF(8) nu este recomandat).

Vă rugăm să consultați secțiunea Flame Graphs a paginii mele perf_events pentru mai multe informații despre perf. Este posibil să scoateți rezultate pliate direct din raportul perf Linux 4.5 prin includerea unui mod pliat, care este accesibil doar utilizând stackcollapse-perf.pl. O scamă de nucleu (-a) și utilizator (-d) separate de stivele de utilizator și nucleu (-f) este furnizată în această probă la 99 Hertz (-F 99) și există o limită de timp de 60 de secunde pentru mostre. Graficele de flacără pot fi generate utilizând SystemTap v1.7 în Fedora 16. Cronometrul poate fi folosit și pentru a eșantiona urmele stivei. Această sondă de profil rulează la rata de ceas a sistemului (CONFIG_HZ). SystemTap poate folosi caracteristica de agregare systemTap pentru a agrega în kernel și pentru a transmite un raport (mai puțin detaliat) utilizatorilor.

Graficele au fost generate folosind KVM (gazdă Ubuntu) (32 de biți) pe un invitat Fedora 16 (cu un CPU virtual). Pe bare metal, unele căi de cod și rapoarte de eșantionare vor fi foarte diferite. Este posibil să faceți clic peste elemente din datele de profil pentru a vedea procente (dar nu clic pentru a mări, deoarece aceasta este o versiune nouă), dar nu pentru a mări. Graficul este un instrument excelent pentru a afla mai multe despre elementele interne Linux. Pe o gazdă hypervisor kernel illumos, atât utilizatorul, cât și stiva de nucleu pot fi văzute în acest exemplu. Sunt disponibile și versiunile SVG și PNG de sine stătătoare. Pentru a observa modul în care timpul nucleului este alocat pentru crearea proceselor de scurtă durată, am efectuat o sarcină de lucru a acestui grafic de flacără.

Un grafic de flacără este de obicei utilizat pentru a identifica sarcina de întrerupere a nucleului prin afișarea părului. Echilibrarea NUMA din Ubuntu versiunea 1716 consumă mai mult de jumătate din ciclurile procesorului pentru a echilibra memoria între noduri, rezultând o performanță lent. O rescrie a graficului de flacără în D3 este esențială pentru menținerea comenzilor de îmbinare constante fără a fi nevoie să regenereze graficul de flacără. În discursul meu din JavaOne 2016, Analiza performanței Java pe Linux cu Flame Graphs, acopăr cele mai recente tehnici de producere a graficelor de flacără în mod mixt folosind Linux perf. JDK8u60 include o caracteristică numită /PreservePointerFrame care vă permite să generați grafice de performanță și flacără. JDK-8068945 a fost adăugat la biblioteca JDK ca un patch fierbinte pentru profilarea stivei (indicator de cadru). Când se utilizează registrul RBP ca indicator de cadru în codul compilat pentru x64, acesta este considerat a fi indicatorul de cadru adecvat.

Când rulează DTrace ca metodă Jstack, poate urmări stive la nivel de utilizator, precum și metode și clase Java. Pentru programele Java, Stackcollapse.pl și flamegraph.pl sunt folosite pentru a genera grafice flame CPU . Unele versiuni JVM nu acceptă ustack helper, care are o serie de probleme. Funcționează cu orice combinație de urme de stivă plus valoare, nu doar urme de stivă cu număr de CPU. Prima problemă este că este posibil ca Jstack() să nu poată parcurge corect stivele din cauza erorii JDK-6260864, ​​care a fost depusă în 2005 și încă nu este remediată din 2014. Această eroare face ca majoritatea stivelor de eșantioane din sarcinile mele de producție să pauză. Puteți obține informații despre alocarea memoriei dispozitivului, IO-ul dispozitivului, modelele de apel de sistem, evenimentele off-CPU și apelurile de funcții specifice. Dacă se utilizează oricare dintre acestea, se poate obține o urmărire a stivei cu valoarea relevantă: numărători, octeți sau latență. Graficele flăcării pot fi vizualizate și pe pagina Grafice flăcări.

Flame Graph Java

Un grafic de flacără este un tip de vizualizare a datelor care este utilizat pentru a reprezenta performanța unui program software. Este un grafic care arată timpul petrecut de un program în fiecare funcție. Înălțimea barelor reprezintă cantitatea de timp pe care programul o petrece în acea funcție. Lățimea barelor reprezintă cantitatea de timp pe care programul o petrece în acea funcție în raport cu celelalte funcții.

Graficele Flame au apărut recent ca o nouă modalitate populară de a vizualiza utilizarea CPU în Java. Acestea pot fi create utilizând profilerul Java ușor de la Google (code.google.com) și software-ul meu flame graph (github). Este un lucru bun că graficele flacără nu sunt o caracteristică separată de profilele Java în viitor. În această postare pe blog, ne vom uita la o metodă bazată numai pe Java JVMTI care, deși funcționează, are unele limitări. Jeremy Manson a creat un profiler Java ușor care poate fi folosit pentru a eșantiona CPU. Acest exemplu de raport este generat când Java pornește până la ieșire, cu un fișier trace.txt atașat la el. Pentru a rula programul, există câteva costuri.

Pentru programul meu, a fost minor (o creștere de doar 1% a ratei de solicitare și o creștere cu 7% a consumului CPU). Dacă rata de eșantionare ar trebui redusă, consultați secțiunile următoare. Ieșirea programului flamegraph.pl poate fi personalizată cu o varietate de opțiuni (lista -h), inclusiv titlul. Profilerul onest al lui Richard Warburton, care se bazează pe aceeași tehnică de profilare, este de asemenea util. Este posibil să reduc rata de eșantionare de la 100 herți la 50 herți sau mai puțin dacă intenționez să colectez cantități mari de date pe o perioadă lungă de timp.