Как визуализировать производительность вашего приложения с помощью SVG Flame Graph

Опубликовано: 2023-02-21

Пламенные графики SVG — отличный способ визуализировать производительность вашего приложения. Отображая время, затраченное на каждую функцию, вы можете быстро определить области своего кода, которые занимают слишком много времени. Чтобы отобразить график пламени SVG, вам нужно будет использовать инструмент, который может его создать. Существует множество доступных инструментов с открытым исходным кодом, таких как flamegraph.io. После того, как вы сгенерировали свой график пламени, вы можете встроить его на свой веб-сайт или в блог, используя тег. Вы также можете использовать такой инструмент, как Google Sheets, чтобы отобразить график пламени. Просто создайте новую электронную таблицу, выберите «Вставить > Изображение», а затем вставьте URL-адрес вашего графика пламени.

Как запустить Flame Graph?

Как запустить Flame Graph?
Изображение: badawi.io

Чтобы запустить пламенный граф, на вашем компьютере должны быть установлены несколько вещей. Первое, что вам нужно, это браузер Google Chrome. Далее вам необходимо установить расширение Flame Graph. После того, как вы установили обе эти вещи, вам нужно открыть браузер Google Chrome и перейти на страницу расширения Flame Graph . Оттуда вам нужно будет нажать на кнопку «Создать новый Flame Graph». Откроется новая вкладка, где вам нужно будет ввести URL-адрес веб-сайта, для которого вы хотите создать график пламени. После того, как вы ввели URL-адрес, вам нужно будет нажать кнопку «Создать Flame Graph». Это займет несколько минут, чтобы создать график пламени. Как только он будет завершен, вы сможете увидеть результаты.

График пламени отображает трассировку распределенного запроса и сводку по каждому вызову службы, произошедшему во время выполнения запроса. Пламенные графики распределенных трассировок показывают данные о задержках и ошибках, помогая разработчикам выявлять узкие места в своих приложениях. В статье дается объяснение того, как интерпретировать граф пламени, а также пример, а также другие методы отслеживания распределенных трассировок. По оси Y отображается глубина стека вызовов (количество вызовов). Когда вы нажимаете на диапазон на графике пламени, вы обычно видите сводку продолжительности и ошибок, связанных с вызовом. Вы можете найти метрики, журналы, данные о производительности сети, горячие точки кода и другую контекстную информацию, щелкнув вкладки под диаграммой пламени. Спиральная диаграмма образована кругом, окруженным набором колец. Пламенные графы можно использовать для визуализации методов и путей кода, используемых при выполнении запроса от профилировщика кода. Инструменты отслеживания производительности приложений и распределения Datadog позволяют отслеживать пути всех запросов во всех службах.

Flame Graphs дают разработчикам быстрый и простой способ увидеть проблемы с производительностью

Графики Flame могут использоваться разработчиками для визуализации производительности распределенных приложений за считанные секунды. Графики Flame могут помочь разработчикам выявлять и устранять проблемы с производительностью, предоставляя графическое представление трассировки запроса и выделяя места, где приложение столкнулось с проблемой.

Как искать на Flamegraph?

Есть несколько разных способов поиска на Flamegraph. Один из способов — использовать окно поиска, расположенное в верхней правой части экрана. Это окно поиска позволяет вам вводить ключевые слова, которые затем будут использоваться для поиска по Flamegraph. Еще один способ поиска на Flamegraph — использовать функцию просмотра. Эта функция находится в левой части экрана. Эта функция позволяет просматривать различные категории пламенных графиков.

С появлением флейм-графов их стало проще искать. Под большим фреймом TCP_send() справа находится путь записи кода. Если вы нажмете на один из выделенных кадров, вы увидите, почему это может произойти. Tcp_Send присутствовал в 59,1% протестированных образцов. Другие интригующие термины, на которые стоит обратить внимание, включают re?cv, spin, copy и x.

Почему это называется графиком пламени?

При создании визуализации Нилакант и Рох использовали совершенно случайные цвета. Процессор был горячим (занят), что объясняет, почему я сначала выбрал только теплые цвета. Поскольку графы пламени напоминали языки пламени, они быстро стали популярными.

Опасности пламени

Огненное мероприятие — развлекательный способ выпустить разочарование и начать оживленную дискуссию. Они также могут привести к разрыву отношений и заставить людей развалиться.
Лучший способ справиться с пламенем — игнорировать его. Кто-то может разместить флейм; вы должны быть тем, кто игнорирует это. Нет нужды отвечать. Это не стоит потраченной энергии.
Флейм может быть забавным способом общения, но в некоторых случаях он также может нанести вред, если использовать его неправильно. Вам не нужно бояться пламени; вместо этого вам следует избегать их и сохранять спокойствие.

Кто изобрел флеймографы?

Графики Flame стали важным инструментом для анализа производительности на многих языках, а также в Netflix и других отраслях. Их автор, Брендан Грегг, создал Flame Graph, который был опубликован в июньском номере журнала Communications of the ACM за 2016 год.


Пламенный просмотрщик графиков

Средство просмотра Flame Graph Viewer — это тип программного обеспечения, которое позволяет пользователям визуализировать данные в виде графика. Это программное обеспечение часто используется для устранения неполадок с компьютерами или другими устройствами.

Вы можете использовать speedscope для просмотра больших профилей производительности через Интернет. FlameGraphs от Брендана Грегга был вдохновлен панелью производительности инструментов разработчика Chrome. Данные из системы не передаются ни на какие серверы и работают полностью в браузере. Chrome и Firefox должны работать со всеми платформами (хотя я тестировал только Mac). В увеличенном виде слева идентичные стеки сгруппированы вместе независимо от того, были ли они записаны последовательно. Стопка каждого родителя сортируется таким образом, что самая тяжелая стопка находится слева — отсюда и пометка «левша». Подробное представление ситуации поможет вам понять, где вы находитесь с точки зрения того, сколько вызовов функций у вас есть в данной ситуации.

Рудро Саманта использовал speedscope для визуализации профилей приложений iOS, захваченных с помощью Xcode. Jest используется для написания тестовых случаев, Travis CI используется для непрерывной интеграции кода, Coveralls используется для отчетов о покрытии тестами, Parcel используется для преобразования исходного кода, а prettier используется для автоматического форматирования кода. Один из способов добиться этого — увеличить количество форматов, которые Speedscope может импортировать, и один из способов сделать интеграцию более тесной. Я работаю над спидскопом уже девять месяцев и чувствую, что позволил ему уйти от меня. Как инженер, я буду стремиться создавать системы и наборы инструментов, которые просты в сопровождении, понятны и полезны, чтобы помогать людям в решении сложных проблем во всем мире. Думаю, в этом году я буду уделять больше времени творческим и совместным проектам.

График пламени онлайн

Пламенный график — это графическое представление данных профилирования, обычно используемое для демонстрации характеристик производительности программ. Высота каждого раздела представляет собой количество времени, проведенного в этом конкретном разделе кода. Разделы упорядочены слева направо в зависимости от того, когда они были вызваны.

В отличие от деревьев и графиков, флейм-графы эффективно используют пространство экрана, представляя большой объем информации в небольшом формате. Нажав здесь, вы узнаете, как преобразовать дерево в пламенный граф, а также каковы ключевые особенности пламенного графа. Flame Graphs используются в Google Cloud Profiler для отображения данных профилирования. Когда вы следуете стеку вызовов, ширина фреймов уменьшается, поскольку общее время ЦП вызываемого объекта не может превышать время ЦП другого вызываемого объекта. Форма пламени вызвана таким поведением. График пламени теперь выглядит следующим образом после удаления лишних пробелов и раскрашивания кадров с использованием собственного процессорного времени. Несмотря на то, что стеки вызовов для foo1 и foo2 сохранились, стек, начинающийся с foo2 и заканчивающийся на foo1, теперь расположен рядом с фреймом.

Как сделать график пламени?

Чтобы сгенерировать пламенные графы, вы должны сначала сэмплировать трассировку стека. Традиционно его делят на два типа: системные профили, такие как Linux perf, которые показывают пути к системному коду (например, сборщик мусора JVM, системные вызовы, TCP), но не профили Java. Доступны профилировщики JVM, такие как hprof, lJP и коммерческие профилировщики.

Диаграмма пламени против графика пламени

Есть несколько ключевых различий между графиком пламени и графиком пламени. Диаграмма пламени обычно показывает временную шкалу событий, а диаграмма пламени показывает трассировку стека. Диаграммы пламени часто используются для устранения проблем с производительностью, в то время как диаграммы пламени чаще используются для визуализации данных о производительности. Диаграммы Flame — отличный способ увидеть, как программа тратит свое время. Они могут показать вам, где находятся узкие места и как программа использует ресурсы. Графики пламени — отличный способ увидеть, как программа использует ресурсы.

В качестве грубого, но полезного метода определения того, какие пути кода являются горячими (поскольку они загружены ЦП), профилирование с фиксированной скоростью дает хорошие результаты. Пламенные графы позволяют быстро идентифицировать горячие пути кода путем выборки трассировки стека. Мои примеры производительности Linux (perf_events) и DTrace являются примерами программного обеспечения, которое вы можете установить. FlameGraph — это инструмент Perl, который создает интерактивный SVG и позволяет вам видеть детали, перетаскивая изображения. Визуализация может показаться похожей на другие от профилировщиков, но она в чем-то отличается от них. Поскольку это первоначально использовалось для визуализации того, что горячо на ЦП, его называли графиком пламени. Ознакомьтесь с разделом профиля eBPF(8), чтобы узнать о способе запуска с меньшими затратами в более новых ядрах Linux (профиль eBPF(8) не рекомендуется).

Пожалуйста, смотрите раздел Flame Graphs на моей странице perf_events для получения дополнительной информации о производительности. Можно вывести свернутый вывод непосредственно из отчета о производительности Linux 4.5, включив свернутый режим, который доступен только с помощью stackcollapse-perf.pl. В этом образце представлен список ядра (-a) и пользователя (-d), разделенных стеками пользователя и ядра (-f), с частотой 99 Гц (-F 99), а для образцов существует ограничение по времени в 60 секунд. Графики пламени можно создавать с помощью SystemTap v1.7 в Fedora 16. Таймер также можно использовать для выборки трассировки стека. Этот зонд профиля работает на системной тактовой частоте (CONFIG_HZ). SystemTap может использовать свою функцию агрегирования systemTap для агрегирования в ядре и передачи (менее подробного) отчета пользователям.

Графики были сгенерированы с использованием KVM (хост Ubuntu) (32 бита) на гостевой системе Fedora 16 (с одним виртуальным процессором). На «голом железе» некоторые пути кода и коэффициенты выборки будут сильно отличаться. Можно щелкнуть элементы в данных профилирования, чтобы увидеть проценты (но не масштабирование по клику, так как это новая версия), но не для увеличения. График — отличный инструмент для более подробного изучения внутреннего устройства Linux. На хосте гипервизора ядра illumos в этом примере можно увидеть как пользовательский стек, так и стек ядра. Также доступны автономные версии SVG и PNG. Чтобы наблюдать, как время ядра распределяется на создание недолговечных процессов, я выполнил рабочую нагрузку этого графа пламени.

Пламенный график обычно используется для определения нагрузки на прерывания ядра путем отображения волос. Балансировка NUMA в выпуске Ubuntu 1716 потребляет более половины циклов ЦП, чтобы сбалансировать память между узлами, что приводит к снижению производительности. Перезапись пламенного графа в D3 необходима для поддержания постоянных заказов на слияние без необходимости регенерировать пламенный граф. В своем выступлении на JavaOne 2016 Анализ производительности Java в Linux с помощью Flame Graphs я рассказываю о самых последних методах создания смешанных графов Flame с использованием производительности Linux. JDK8u60 включает функцию под названием /PreservePointerFrame, которая позволяет создавать графики производительности и пламени. JDK-8068945 был добавлен в библиотеку JDK в качестве оперативного исправления для профилирования стека (указатель кадра). При использовании регистра RBP в качестве указателя кадра в скомпилированном коде для x64 он считается правильным указателем кадра.

При запуске DTrace как метода Jstack он может отслеживать стеки пользовательского уровня, а также методы и классы Java. Для Java-программ Stackcollapse.pl и flamegraph.pl используются для генерации графиков пламени процессора . Некоторые версии JVM не поддерживают помощника ustack, который имеет ряд проблем. Он работает с любой комбинацией трассировки стека и значения, а не только трассировки стека с количеством ЦП. Первая проблема заключается в том, что Jstack() не может правильно проходить стеки из-за ошибки JDK-6260864, ​​которая была зарегистрирована в 2005 году и до сих пор не исправлена ​​​​по состоянию на 2014 год. Эта ошибка приводит к тому, что большинство примеров стеков в моих рабочих нагрузках перерыв. Вы можете получить представление о распределении памяти устройства, вводе-выводе устройства, шаблонах системных вызовов, событиях вне ЦП и вызовах определенных функций. Если какой-либо из них используется, трассировка стека может быть получена с соответствующим значением: счетчики, байты или задержка. Графики пламени также можно просмотреть на странице Графики пламени.

Пламенный граф Java

Пламенный график — это тип визуализации данных, который используется для представления производительности программного обеспечения. Это график, показывающий количество времени, которое программа тратит на выполнение каждой функции. Высота столбцов представляет количество времени, которое программа проводит в этой функции. Ширина полос представляет собой количество времени, которое программа проводит в этой функции по сравнению с другими функциями.

Графики Flame недавно стали популярным новым способом визуализации использования ЦП в Java. Их можно создать с помощью облегченного Java-профилировщика Google (code.google.com) и моего программного обеспечения для работы с пламенными графами (github). Хорошо, что в будущем пламенные графы не станут отдельной функцией профилировщиков Java. В этом сообщении блога мы рассмотрим основанный только на Java метод JVMTI, который, хотя и работает, имеет некоторые ограничения. Джереми Мэнсон создал облегченный профилировщик Java, который можно использовать для выборки ЦП. Этот пример отчета создается, когда Java запускается до завершения, с добавленным к нему файлом trace.txt. Чтобы запустить программу, есть несколько затрат.

Для моей программы это было незначительно (увеличение скорости запросов всего на 1% и увеличение потребления ЦП на 7%). Если необходимо уменьшить частоту дискретизации, см. следующие разделы. Вывод программы flamegraph.pl можно настроить с помощью различных опций (список -h), включая заголовок. Пригодится и честный профилировщик Ричарда Уорбертона, основанный на той же методике профилирования. Возможно, я уменьшу частоту дискретизации со 100 Гц до 50 Гц или ниже, если намереваюсь собирать большие объемы данных в течение длительного периода времени.