Jak wizualizować wydajność aplikacji za pomocą wykresu płomieni SVG

Opublikowany: 2023-02-21

Wykresy płomieni SVG to świetny sposób na wizualizację wydajności aplikacji. Wyświetlając czas spędzony w każdej funkcji, możesz szybko zidentyfikować obszary kodu, które zajmują zbyt dużo czasu. Aby wyświetlić wykres płomienia SVG, musisz użyć narzędzia, które może je wygenerować. Dostępnych jest wiele narzędzi typu open source, takich jak flamegraph.io. Po wygenerowaniu wykresu płomienia możesz osadzić go na swojej stronie internetowej lub blogu za pomocą tagu. Możesz także użyć narzędzia takiego jak Arkusze Google, aby wyświetlić wykres płomienia. Po prostu utwórz nowy arkusz kalkulacyjny, wybierz „Wstaw > Obraz”, a następnie wklej adres URL wykresu płomienia.

Jak uruchomić wykres płomienia?

Jak uruchomić wykres płomienia?
Zdjęcie autorstwa: badawi.io

Aby uruchomić wykres płomienia, musisz mieć kilka rzeczy zainstalowanych na komputerze. Pierwszą rzeczą, której potrzebujesz, jest przeglądarka Google Chrome. Następnie musisz zainstalować rozszerzenie Flame Graph. Po zainstalowaniu obu tych rzeczy musisz otworzyć przeglądarkę Google Chrome i przejść do strony rozszerzenia Flame Graph . Stamtąd musisz kliknąć przycisk „Utwórz nowy wykres płomienia”. Spowoduje to wyświetlenie nowej karty, w której będziesz musiał wprowadzić adres URL witryny, dla której chcesz utworzyć wykres płomienia. Po wprowadzeniu adresu URL musisz kliknąć przycisk „Utwórz wykres płomienia”. Utworzenie wykresu płomienia zajmie kilka chwil. Po zakończeniu będziesz mógł zobaczyć wyniki.

Wykres płomienia przedstawia ślad rozproszonego żądania i podsumowanie każdego zgłoszenia serwisowego, które wystąpiło podczas wykonywania żądania. Wykresy płomieni rozproszonych śladów pokazują dane dotyczące opóźnień i błędów, aby pomóc programistom zidentyfikować wąskie gardła w ich aplikacjach. W artykule wyjaśniono, jak interpretować wykres płomienia wraz z przykładem, a także przedstawiono inne metody śledzenia rozłożonych śladów. Oś Y wyświetla głębokość stosu wywołań (liczbę wywołań). Gdy klikniesz zakres na wykresie płomienia, zwykle zobaczysz podsumowanie czasu trwania i błędu związanego z wywołaniem. Możesz znaleźć metryki, dzienniki, dane dotyczące wydajności sieci, hotspoty kodu i inne informacje kontekstowe, klikając karty pod wykresem płomienia. Diagram spiralny składa się z koła otoczonego zestawem pierścieni. Wykresy płomieniowe mogą służyć do wizualizacji metod i ścieżek kodu używanych w realizacji żądania od profilera kodu. Narzędzia Datadog do monitorowania wydajności aplikacji i śledzenia dystrybucji umożliwiają śledzenie ścieżki wszystkich żądań we wszystkich usługach.

Wykresy płomieni zapewniają programistom szybki i łatwy sposób na zobaczenie problemów z wydajnością

Wykresy Flame mogą być używane przez programistów do wizualizacji wydajności rozproszonych aplikacji w ciągu kilku sekund. Wykresy Flame mogą pomóc programistom identyfikować i korygować problemy z wydajnością, zapewniając graficzną reprezentację śledzenia żądania i podkreślając, gdzie aplikacja napotkała problemy.

Jak szukać na Flamegraph?

Istnieje kilka różnych sposobów wyszukiwania na flamegraphie. Jednym ze sposobów jest skorzystanie z pola wyszukiwania znajdującego się w prawym górnym rogu ekranu. To pole wyszukiwania umożliwia wpisanie słów kluczowych, które następnie zostaną użyte do przeszukania wykresu płomieni. Innym sposobem wyszukiwania na flamegraphie jest skorzystanie z funkcji przeglądania. Funkcję tę można znaleźć po lewej stronie ekranu. Ta funkcja umożliwia przeglądanie różnych kategorii flamegraphów.

Wraz z pojawieniem się wykresów płomienia łatwiej jest je teraz przeszukiwać. Pod dużą ramką TCP_send() po prawej stronie znajduje się ścieżka kodu zapisu. Jeśli klikniesz na jedną z podświetlonych ramek, zobaczysz, dlaczego tak się dzieje. Tcp_Send był obecny w 59,1% badanych próbek. Inne intrygujące terminy, których należy szukać, to re?cv, spin, copy i x.

Dlaczego nazywa się to wykresem płomienia?

Tworząc wizualizację, Neelakanth i Roch zastosowali całkowicie losową kolorystykę. Procesor był gorący (zajęty), co wyjaśniało, dlaczego najpierw wybrałem tylko ciepłe kolory. Ponieważ przypominał płomienie, wykresy płomieni szybko stały się popularne.

Niebezpieczeństwa płomieni

Ogniste wydarzenie to zabawny sposób na wyładowanie frustracji i rozpoczęcie ożywionej dyskusji. Mogą też doprowadzić do rozpadu związków i sprawić, że ludzie się rozpadną.
Najlepszym sposobem radzenia sobie z płomieniami jest ich ignorowanie. Ktoś może opublikować płomień; powinieneś być tym, który to ignoruje. Nie ma potrzeby odpowiadać. To nie jest warte wydanej energii.
Płomień może być zabawnym sposobem komunikowania się, ale w niektórych przypadkach może być również szkodliwy, jeśli jest używany nieprawidłowo. Nie musisz bać się płomieni; zamiast tego należy ich unikać i zachować spokój.

Kto wynalazł flamografy?

Wykresy płomieniowe stały się ważnym narzędziem do analizy wydajności w wielu językach, a także w Netflix i innych branżach. Ich autor, Brendan Gregg, stworzył Flame Graph, który został opublikowany w wydaniu Communications of the ACM z czerwca 2016 roku.


Przeglądarka wykresów płomienia

Przeglądarka wykresów płomieni to rodzaj oprogramowania, które umożliwia użytkownikom wizualizację danych w postaci wykresu. To oprogramowanie jest często używane do rozwiązywania problemów z komputerami lub innymi urządzeniami.

Możesz użyć speedscope do przeglądania dużych profili wydajności w sposób internetowy. FlameGraphs autorstwa Brendana Gregga został zainspirowany panelem wydajności narzędzi programistycznych Chrome. Dane z systemu nie są przekazywane do żadnych serwerów i działają całkowicie w przeglądarce. Chrome i Firefox powinny działać na wszystkich platformach (chociaż testowałem tylko Maca). W lewym widoku pełnym, identyczne stosy są grupowane, niezależnie od tego, czy zostały nagrane sekwencyjnie. Stos każdego rodzica jest sortowany w taki sposób, że jego najcięższy stos znajduje się po lewej stronie — stąd etykieta dla leworęcznych. Szczegółowy widok sytuacji pomoże ci zrozumieć, gdzie jesteś pod względem liczby wywołań funkcji w danej sytuacji.

Rudro Samanta używa speedscope do wizualizacji profili aplikacji iOS przechwyconych za pomocą Xcode. Jest służy do pisania przypadków testowych, Travis CI służy do ciągłej integracji kodu, Coveralls służy do raportowania pokrycia testów, Parcel służy do przekształcania kodu źródłowego, a prettier służy do automatycznego formatowania kodu. Jednym ze sposobów osiągnięcia tego celu jest zwiększenie liczby formatów, które speedscope może zaimportować, oraz jeden ze sposobów na ściślejsze integracje. Pracuję nad speedscope od dziewięciu miesięcy i czuję, że pozwoliłem mu uciec. Jako inżynier będę dążył do tworzenia systemów i zestawów narzędzi, które są łatwe w utrzymaniu, zrozumiałe i przydatne, aby pomagać ludziom w rozwiązywaniu złożonych problemów na całym świecie. Wierzę, że w tym roku poświęcę więcej czasu projektom kreatywnym i opartym na współpracy.

Wykres płomienia online

Wykres płomienia jest graficzną reprezentacją danych profilowania, zwykle używaną do pokazania charakterystyki wydajności programów. Wysokość każdej sekcji reprezentuje ilość czasu spędzonego w tej konkretnej sekcji kodu. Sekcje są uporządkowane od lewej do prawej, zgodnie z tym, kiedy zostały wywołane.

W przeciwieństwie do drzew i wykresów, wykresy płomieni efektywnie wykorzystują przestrzeń ekranu, prezentując dużą ilość informacji w małym formacie. Klikając tutaj, dowiesz się, jak przekształcić drzewo w wykres płomienia, a także jakie są kluczowe cechy wykresu płomienia. Wykresy płomieniowe są używane w Google Cloud Profiler do wyświetlania danych profilowania. Gdy podążasz za stosem wywołań, szerokości ramek zmniejszają się, ponieważ całkowity czas procesora odbiorcy nie może być większy niż czas procesora innego odbiorcy. Kształt płomienia jest spowodowany tym zachowaniem. Wykres płomienia wygląda teraz następująco po usunięciu nadmiaru białych znaków i kolorowaniu ramek przy użyciu własnego czasu procesora. Mimo że stosy wywołań dla foo1 i foo2 zostały zachowane, stos rozpoczynający się od foo2 i kończący na foo1 znajduje się teraz obok ramki.

Jak zrobić wykres płomienia?

Aby wygenerować wykresy płomienia, należy najpierw pobrać próbkę śladu stosu. Tradycyjnie dzieli się go na dwa typy: profile systemowe, takie jak Linux perf, które pokazują systemowe ścieżki kodu (np. JVM GC, syscalls, TCP), ale nie profile Java. Dostępne są profilery JVM, takie jak hprof, lJP i profilery komercyjne.

Wykres płomienia Vs Wykres płomienia

Istnieje kilka kluczowych różnic między wykresem płomienia a wykresem płomienia. Wykres płomienia zazwyczaj pokazuje oś czasu zdarzeń, podczas gdy wykres płomienia pokazuje ślad stosu. Wykresy płomieni są często używane do debugowania problemów z wydajnością, podczas gdy wykresy płomieni są częściej używane do wizualizacji danych dotyczących wydajności. Wykresy płomieni to świetny sposób, aby zobaczyć, jak program spędza czas. Mogą pokazać, gdzie są wąskie gardła i jak program wykorzystuje zasoby. Wykresy płomieni to świetny sposób, aby zobaczyć, jak program wykorzystuje zasoby.

Jako prymitywna, ale użyteczna technika określania, które ścieżki kodu są gorące (ponieważ są zajęte przez procesor), profilowanie ze stałą szybkością daje dobre wyniki. Wykresy płomieniowe pozwalają szybko identyfikować ścieżki gorącego kodu poprzez próbkowanie śladów stosu. Moje przykłady Linux perf (perf_events) i DTrace to przykłady oprogramowania, które można zainstalować. FlameGraph to narzędzie Perla, które generuje interaktywne SVG i pozwala zobaczyć szczegóły, przeciągając i upuszczając obrazy. Wizualizacja może wyglądać podobnie do innych z profilerów, ale różni się od nich pod pewnymi względami. Ponieważ początkowo był używany do wizualizacji tego, co jest gorące na procesorze, nazywano go wykresem płomienia. Sprawdź sekcję profilu eBPF(8), aby poznać mniej kosztowną metodę uruchamiania w nowszych jądrach Linuksa (profil eBPF(8) nie jest zalecany).

Proszę zobaczyć sekcję Flame Graphs na mojej stronie perf_events, aby uzyskać więcej informacji na temat perf. Możliwe jest wyprowadzenie złożonego wyniku bezpośrednio z raportu perf systemu Linux 4.5 poprzez włączenie trybu złożonego, który jest dostępny tylko za pomocą stackcollapse-perf.pl. Strzępki jądra (-a) i użytkownika (-d) oddzielone stosami użytkownika i jądra (-f) są dostarczane w tej próbce z częstotliwością 99 herców (-F 99), a dla próbek obowiązuje limit czasu wynoszący 60 sekund. Wykresy płomieni można generować przy użyciu SystemTap v1.7 w Fedorze 16. Zegar może być również używany do próbkowania śladów stosu. Ta sonda profilu działa z częstotliwością zegara systemowego (CONFIG_HZ). SystemTap może używać swojej funkcji agregacji systemTap do agregowania w jądrze i przekazywania użytkownikom (mniej szczegółowych) raportów.

Wykresy zostały wygenerowane przy użyciu KVM (hosta Ubuntu) (32-bitowego) na gościu Fedora 16 (z jednym wirtualnym procesorem). Na gołym metalu niektóre ścieżki kodu i współczynniki próbkowania będą bardzo różne. Możliwe jest klikanie elementów w danych profilowania, aby zobaczyć wartości procentowe (ale nie kliknij, aby powiększyć, ponieważ jest to nowa wersja), ale nie, aby powiększyć. Wykres jest doskonałym narzędziem, aby dowiedzieć się więcej o wewnętrznych elementach Linuksa. Na hoście hipernadzorcy jądra illumos w tym przykładzie widać zarówno użytkownika, jak i stos jądra. Dostępne są również samodzielne wersje SVG i PNG. Aby zaobserwować, w jaki sposób czas jądra jest przydzielany do tworzenia procesów krótkotrwałych, wykonałem obciążenie pracą tego wykresu płomienia.

Wykres płomienia jest zwykle używany do identyfikacji obciążenia przerwaniami jądra poprzez wyświetlanie włosów. Równoważenie NUMA w systemie Ubuntu w wersji 1716 zużywa ponad połowę cykli procesora w celu zrównoważenia pamięci między węzłami, co skutkuje powolną wydajnością. Przepisanie wykresu płomienia w D3 jest niezbędne do utrzymania stałej kolejności scalania bez konieczności ponownego generowania wykresu płomienia. W moim wykładzie JavaOne 2016 Java Performance Analysis on Linux with Flame Graphs omawiam najnowsze techniki tworzenia wykresów płomieni w trybie mieszanym przy użyciu Linux perf. JDK8u60 zawiera funkcję o nazwie /PreservePointerFrame, która umożliwia generowanie wykresów wydajności i płomienia. JDK-8068945 został dodany do biblioteki JDK jako gorąca poprawka do profilowania stosu (wskaźnik ramki). Używając rejestru RBP jako wskaźnika ramki w skompilowanym kodzie dla x64, jest on uważany za właściwy wskaźnik ramki.

Uruchamiając DTrace jako metodę Jstack, może śledzić stosy na poziomie użytkownika, a także metody i klasy Java. W przypadku programów Java Stackcollapse.pl i flamegraph.pl są używane do generowania wykresów płomienia procesora . Niektóre wersje JVM nie obsługują pomocnika ustack, który ma wiele problemów. Działa z dowolną kombinacją śledzenia stosu i wartości, nie tylko ze śladami stosu z liczbą procesorów. Pierwszym problemem jest to, że Jstack() może nie być w stanie prawidłowo chodzić po stosach z powodu błędu JDK-6260864, ​​który został zgłoszony w 2005 roku i nadal nie został naprawiony od 2014 roku. Ten błąd powoduje, że większość przykładowych stosów w moich obciążeniach produkcyjnych przerwa. Można uzyskać wgląd w alokację pamięci urządzenia, operacje we/wy urządzenia, wzorce wywołań systemowych, zdarzenia poza procesorem i wywołania określonych funkcji. Jeśli którykolwiek z nich jest używany, można uzyskać ślad stosu z odpowiednią wartością: liczby, bajty lub opóźnienie. Wykresy płomieni można również przeglądać na stronie Wykresy płomieni.

Flame Graph Java

Wykres płomienia to rodzaj wizualizacji danych, który jest używany do reprezentowania wydajności programu. Jest to wykres, który pokazuje ilość czasu, jaki program spędza w każdej funkcji. Wysokość słupków reprezentuje ilość czasu, jaki program spędza w tej funkcji. Szerokość słupków reprezentuje ilość czasu, jaki program spędza w tej funkcji w stosunku do innych funkcji.

Wykresy płomieniowe stały się ostatnio popularnym nowym sposobem wizualizacji użycia procesora w Javie. Można je tworzyć za pomocą lekkiego profilera Java firmy Google (code.google.com) i mojego oprogramowania do wykresów płomieni (github). To dobrze, że wykresy płomieni nie będą w przyszłości odrębną funkcją od profilerów Java. W tym poście na blogu przyjrzymy się metodzie JVMTI opartej wyłącznie na Javie, która choć działa, ma pewne ograniczenia. Jeremy Manson stworzył lekki profiler Java, którego można użyć do próbkowania procesora. Ten przykładowy raport jest generowany podczas uruchamiania środowiska Java aż do jego zamknięcia, z dołączonym do niego plikiem trace.txt. Aby uruchomić program, istnieje kilka kosztów.

W przypadku mojego programu było to niewielkie (wzrost o zaledwie 1% liczby żądań i wzrost zużycia procesora o 7%). Jeśli częstotliwość próbkowania powinna zostać zmniejszona, patrz kolejne sekcje. Wyjście programu flamegraph.pl można dostosować za pomocą różnych opcji (list -h), w tym tytułu. Przydatny jest również uczciwy profiler Richarda Warburtona, oparty na tej samej technice profilowania. Możliwe, że zmniejszę częstotliwość próbkowania ze 100 Hz do 50 Hz lub mniej, jeśli zamierzam gromadzić duże ilości danych przez długi czas.