主要網站:http://www.brendangregg.com/flamegraphs.html
示例(單擊縮放):
單擊一個框以將火焰圖縮小到此堆棧框架。要搜索和突出顯示與正則表達式匹配的所有堆棧框架,請單擊右上角的搜索按鈕或按CTRL-F。默認情況下,搜索對情況很敏感,但是可以通過按CTRL-I或單擊右上角的IC按鈕來對其進行切換。
其他網站:
火焰圖可以通過三個步驟創建:
可以使用Linux Perf_events,FreeBSD PMCSTAT(HWPMC),DTRACE,SYSTEMTAP和許多其他參考器捕獲堆棧樣品。請參閱“堆棧崩潰” - *轉換器。
使用Linux perf_events(又稱“ perf”)來捕獲99個HERTZ堆棧樣本的60秒,即用戶和內核級堆棧,所有過程:
# 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在997 Hertz捕獲60秒的內核堆棧:
# dtrace -x stackframes=100 -n 'profile-997 /arg0/ { @[stack()] = count(); } tick-60s { exit(0); }' -o out.kern_stacks
使用DTRACE捕獲67 Hertz的PID 12345的60秒用戶級堆棧:
# dtrace -x ustackframes=100 -n 'profile-97 /pid == 12345 && arg1/ { @[ustack()] = count(); } tick-60s { exit(0); }' -o out.user_stacks
60秒的用戶級堆棧,包括在97赫茲的PID 12345花費的時間:
# dtrace -x ustackframes=100 -n 'profile-97 /pid == 12345/ { @[ustack()] = count(); } tick-60s { exit(0); }' -o out.user_stacks
jstack()
ustack()
()如果應用程序具有uSTACK助手以包括翻譯幀(例如,node.js框架;請參閱:http://dtrace.org/blogs/dap/dap/2012/01/01/05 /where-where-does-does-does-does - 您的節點程序編程spend-its time/)。用戶級堆棧集合的速率比內核要慢,這在使用jstack()
時尤其重要,因為它可以執行其他工作來翻譯幀。
使用堆棧崩潰程序將堆棧樣本折疊成單行。提供的程序是:
stackcollapse.pl
:對於Dtrace堆棧stackcollapse-perf.pl
:對於Linux Perf_events“ perf腳本”輸出stackcollapse-pmc.pl
:用於FreeBSD PMCSTAT -G堆棧stackcollapse-stap.pl
:用於SystemTap堆棧stackcollapse-instruments.pl
:對於Xcode儀器stackcollapse-vtune.pl
:對於Intel VTune配置文件stackcollapse-ljp.awk
:用於輕巧的Java Profilerstackcollapse-jstack.pl
:對於Java Jstack(1)輸出stackcollapse-gdb.pl
:對於GDB(1)堆棧stackcollapse-go.pl
:對於Golang Pprof堆棧stackcollapse-vsprof.pl
:用於Microsoft Visual Studio配置文件stackcollapse-wcp.pl
:用於壁接式Profiler輸出用法示例:
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 - All,其中包括所有有助於FlameGraph.pl的註釋,用於內核和用戶級別代碼。生成的火焰圖使用:綠色== Java,Yellow == C ++,紅色==用戶模式本機,Orange ==內核。
此配置文件來自對Vert.x性能的分析。基準客戶端WRK在火焰圖中也可見。
還包括來自Dtrace的示例輸出,示例 - dtrace-stacks.txt和由此產生的火焰圖,示例dtrace.svg:
您可以使用:
$ ./stackcollapse.pl example-stacks.txt | ./flamegraph.pl > example.svg
這是從特定的性能研究中進行的:火焰圖確定了CPU時間是在LOFS模塊中花費的,並量化了這段時間。
有關選項,請參見使用消息(-help):
用法:./flamegraph.pl [options] 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
選項,它將使用$顏色選擇,並像普通一樣隨機生成調色板。使用--cp
選項創建的任何未來的火焰圖都將使用相同的調色板地圖。未來FlameGraphs的任何新符號都將使用$顏色選擇隨機生成其顏色。
如果您不喜歡調色板,只需刪除Palette.map文件即可。
這使您可以在火焰圖之間更改色彩使差異真正脫穎而出。
例子:
假設我們有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