Основной веб -сайт: http://www.brendangregg.com/flamegraphs.html
Пример (нажмите, чтобы увеличить):
Нажмите на поле, чтобы увеличить график пламени только до этой кадры стека. Чтобы найти и выделить все кадры стека, соответствующие регулярному выражению, нажмите кнопку поиска в верхнем правом углу или нажмите Ctrl-F. По умолчанию поиск чувствителен к корпусу, но его можно переключать, нажав CTRL-I или нажав кнопку IC в верхнем правом углу.
Другие сайты:
Графики пламени могут быть созданы в трех шагах:
Образцы стека могут быть сняты с использованием Linux perf_events, freebsd PMCStat (HWPMC), DTRACE, SystemTAP и многих других профилировщиков. Смотрите конвертеры Stackcollapse-*.
Используя Linux perf_events (aka «perf») для захвата 60 секунд из 99 образцов стека Hertz, как стеков как пользовательского, так и на уровне ядра, все процессы:
# perf record -F 99 -a -g -- sleep 60
# perf script > out.perf
Теперь только захватывает PID 181:
# perf record -F 99 -p 181 -g -- sleep 60
# perf script > out.perf
Используя DTRACE для захвата 60 секунд стеков ядра в 997 Герц:
# dtrace -x stackframes=100 -n 'profile-997 /arg0/ { @[stack()] = count(); } tick-60s { exit(0); }' -o out.kern_stacks
Использование DTRACE для захвата 60 секунд стеков на уровне пользователя для PID 12345 при 97 Герца:
# dtrace -x ustackframes=100 -n 'profile-97 /pid == 12345 && arg1/ { @[ustack()] = count(); } tick-60s { exit(0); }' -o out.user_stacks
60 секунд стеков пользовательского уровня, включая время, проведенное в клетке, для PID 12345 в 97 Герц:
# dtrace -x ustackframes=100 -n 'profile-97 /pid == 12345/ { @[ustack()] = count(); } tick-60s { exit(0); }' -o out.user_stacks
Switch ustack()
для jstack()
Если в приложении есть помощник Ustack, чтобы включить переведенные рамки (например, node.js рамки; см.: Http://dtrace.org/blogs/dap/2012/01/05/where-does -Your-Node-Program-Spend-It-Time/). Скорость сбора стека пользователя на уровне пользователя намеренно медленнее, чем ядро, что особенно важно при использовании jstack()
поскольку он выполняет дополнительную работу для перевода кадров.
Используйте программы StackCollApse, чтобы сложить образцы стека в отдельные линии. Предоставленные программы:
stackcollapse.pl
: для стеков dtracestackcollapse-perf.pl
: для выхода Linux perf_events "Perf Script"stackcollapse-pmc.pl
: для Freebsd PmcStat -G Stacksstackcollapse-stap.pl
: для стеков SystemTAPstackcollapse-instruments.pl
: для инструментов xcodestackcollapse-vtune.pl
: для профилей Intel vtunestackcollapse-ljp.awk
: для легкого Java Profilerstackcollapse-jstack.pl
: для java jstack (1)stackcollapse-gdb.pl
: для стеков GDB (1)stackcollapse-go.pl
: для стеков Golang PPROFstackcollapse-vsprof.pl
: для профилей Microsoft Visual Studiostackcollapse-wcp.pl
: для вывода WallClockProfilerПример использования:
For perf_events:
$ ./stackcollapse-perf.pl out.perf > out.folded
For DTrace:
$ ./stackcollapse.pl out.kern_stacks > out.kern_folded
Вывод выглядит так:
unix`_sys_sysenter_post_swapgs 1401
unix`_sys_sysenter_post_swapgs;genunix`close 5
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf 85
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;c2audit`audit_closef 26
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;c2audit`audit_setf 5
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;genunix`audit_getstate 6
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;genunix`audit_unfalloc 2
unix`_sys_sysenter_post_swapgs;genunix`close;genunix`closeandsetf;genunix`closef 48
[...]
Используйте FlameGraph.pl, чтобы отобразить SVG.
$ ./flamegraph.pl out.kern_folded > kernel.svg
Преимущество наличия сложенного входного файла (и почему он отделен от Flamegraph.pl), что вы можете использовать GREP для интересующих функций. Например:
$ grep cpuid out.kern_folded | ./flamegraph.pl > cpuid.svg
Пример вывода из Linux "Perf Script" включен, Gzip'd, как пример-perf-stacks.txt.gz. Полученный график пламени является примером-perf.svg:
Вы можете создать это, используя:
$ gunzip -c example-perf-stacks.txt.gz | ./stackcollapse-perf.pl --all | ./flamegraph.pl --color=java --hash > example-perf.svg
Это показывает мой типичный рабочий процесс: профили GZIP на цели, а затем скопируйте их на мой ноутбук для анализа. Поскольку у меня есть сотни профилей, я оставляю их Gzip'd!
Поскольку этот профиль включал Java, я использовал палитру FlameGraph.pl -color = Java. Я также использовал Stackcollapse-perf.pl-все, который включает в себя все аннотации, которые помогают Flamegraph.pl Использовать отдельные цвета для кода ядра и пользовательского уровня. Полученный график пламени используется: green == java, желтый == c ++, red == Пользовательский режим, родной, Orange == Ядро.
Этот профиль был из анализа производительности vert.x. Клиент Benchmark, WRK, также видна на графике Flame.
Также включен пример вывода DTRACE, пример DTRACE-STACKS.TXT и полученный график пламени, пример-dtrace.svg:
Вы можете генерировать это, используя:
$ ./stackcollapse.pl example-stacks.txt | ./flamegraph.pl > example.svg
Это было из конкретного исследования производительности: график пламени определил, что время процессора было потрачено в модуле LOFS, и количественно определили это время.
См. Сообщение об использовании (-help) для вариантов:
Использование: ./flamegraph.pl [опции] infile> outfile.svg
--title TEXT # change title text
--subtitle TEXT # second level title (optional)
--width NUM # width of image (default 1200)
--height NUM # height of each frame (default 16)
--minwidth NUM # omit smaller functions. In pixels or use "%" for
# percentage of time (default 0.1 pixels)
--fonttype FONT # font type (default "Verdana")
--fontsize NUM # font size (default 12)
--countname TEXT # count type label (default "samples")
--nametype TEXT # name type label (default "Function:")
--colors PALETTE # set color palette. choices are: hot (default), mem,
# io, wakeup, chain, java, js, perl, red, green, blue,
# aqua, yellow, purple, orange
--bgcolors COLOR # set background colors. gradient choices are yellow
# (default), blue, green, grey; flat colors use "#rrggbb"
--hash # colors are keyed by function name hash
--cp # use consistent palette (palette.map)
--reverse # generate stack-reversed flame graph
--inverted # icicle graph
--flamechart # produce a flame chart (sort by time, do not merge stacks)
--negate # switch differential hues (blue<->red)
--notes TEXT # add notes comment in SVG (for debugging)
--help # this message
eg,
./flamegraph.pl --title="Flame Graph: malloc()" trace.txt > graph.svg
Как предполагается в примере, графики огня могут обрабатывать следы любого события, например, Malloc () S, при условии, что следы стека собираются.
Если вы используете опцию --cp
, он будет использовать выбор $ Colors и случайным образом генерировать палитру как обычную. Любые будущие фламиграфы, созданные с использованием опции --cp
будут использовать ту же карту палитры. Любые новые символы из будущих FlameGraphs будут иметь свои цвета случайным образом сгенерированы с использованием выбора $ Colors.
Если вам не нравится палитра, просто удалите файл Palette.map.
Это позволяет вам изменить ваши цвета между FlameGraphs, чтобы различия действительно выделялись.
Пример:
Скажем, у нас есть 2 захвата, один с проблемой, и один, когда он работал (что бы ни было «это»):
cat working.folded | ./flamegraph.pl --cp > working.svg
# this generates a palette.map, as per the normal random generated look.
cat broken.folded | ./flamegraph.pl --cp --colors mem > broken.svg
# this svg will use the same palette.map for the same events, but a very
# different colorscheme for any new events.
Взгляните на демонстрационный каталог для примера:
Палитра-пример-ход. Svg
палитра-пример-разгром. Svg