Что это такое
FlameGraph — репозиторий Brendan Gregg со скриптами для построения flame graph. Такой график помогает увидеть, какие пути выполнения занимают больше всего времени или памяти.
Идея стала популярной в системной производительности, потому что вместо длинной таблицы функций человек видит форму нагрузки. Широкие блоки сразу показывают места, куда стоит смотреть в первую очередь.
Что внутри
В репозитории есть скрипты для сворачивания стеков из разных источников и генерации SVG. Поддерживаются данные из Linux perf, DTrace, SystemTap, Xcode Instruments, Xperf и других профилировщиков.
Типовой путь состоит из трех шагов: снять стеки, преобразовать их в folded-формат и сгенерировать SVG. Получившийся файл можно открыть в браузере, увеличивать фреймы и искать функции по регулярному выражению.
Как используют
FlameGraph применяют при расследовании высокой нагрузки CPU, утечек памяти, медленных запросов и неожиданных задержек. Он особенно полезен, когда непонятно, где именно программа тратит время.
Инструмент не заменяет профилировщик: он визуализирует уже собранные сэмплы. Поэтому качество результата зависит от того, как сняты данные и насколько репрезентативна нагрузка.
Пример
Пример показывает классический путь на Linux: записать профиль через perf, развернуть стеки и построить SVG-граф.
Построение flame graph
Команды снимают профиль, преобразуют стеки и создают SVG, который удобно открыть в браузере.
perf record -F 99 -a -g -- sleep 60
perf script > out.perf
./stackcollapse-perf.pl out.perf > out.folded
./flamegraph.pl out.folded > flamegraph.svg
Сильные стороны и ограничения
Сильная сторона FlameGraph — мгновенная читаемость. Даже большая система становится понятнее, когда горячие пути занимают больше визуального пространства.
Ограничение — интерпретация. Flame graph показывает, где накопились сэмплы, но решение все равно требует знания приложения, нагрузки и цены каждого изменения.
Контекст проекта
FlameGraph ведется в репозитории brendangregg/FlameGraph; публичная история проекта начинается 2011-12-16. Основной язык, который показывает GitHub, — Perl, лицензия — не указана. Есть отдельный сайт проекта: http://www.brendangregg.com/flamegraphs.html.
Для страницы каталога это важно как практический контекст: читатель видит не абстрактное название, а реальный проект с владельцем, лицензией, технической базой и открытой историей изменений.