Situs web utama: http://www.brendangregg.com/flamegraphs.html
Contoh (klik untuk zoom):
Klik kotak untuk memperbesar grafik api ke bingkai tumpukan ini saja. Untuk mencari dan menyorot semua bingkai tumpukan yang cocok dengan ekspresi reguler, klik tombol pencarian di sudut kanan atas atau tekan Ctrl-F. Secara default, pencarian case sensitif, tetapi ini dapat diaktifkan dengan menekan Ctrl-I atau dengan mengklik tombol IC di sudut kanan atas.
Situs lain:
Grafik api dapat dibuat dalam tiga langkah:
Sampel tumpukan dapat ditangkap menggunakan Linux Perf_events, FreeBSD PMCSTAT (HWPMC), DTrace, Systemtap, dan banyak profiler lainnya. Lihat StackCollapse-* Converters.
Menggunakan Linux Perf_events (alias "perf") untuk menangkap 60 detik dari 99 sampel tumpukan hertz, baik tumpukan tingkat pengguna dan kernel, semua proses:
# perf record -F 99 -a -g -- sleep 60
# perf script > out.perf
Sekarang hanya menangkap PID 181:
# perf record -F 99 -p 181 -g -- sleep 60
# perf script > out.perf
Menggunakan DTrace untuk menangkap 60 detik tumpukan kernel di 997 Hertz:
# dtrace -x stackframes=100 -n 'profile-997 /arg0/ { @[stack()] = count(); } tick-60s { exit(0); }' -o out.kern_stacks
Menggunakan DTrace untuk menangkap 60 detik tumpukan tingkat pengguna untuk PID 12345 di 97 Hertz:
# dtrace -x ustackframes=100 -n 'profile-97 /pid == 12345 && arg1/ { @[ustack()] = count(); } tick-60s { exit(0); }' -o out.user_stacks
60 detik tumpukan tingkat pengguna, termasuk waktu yang dihabiskan di dalam Kernel, untuk PID 12345 di 97 Hertz:
# dtrace -x ustackframes=100 -n 'profile-97 /pid == 12345/ { @[ustack()] = count(); } tick-60s { exit(0); }' -o out.user_stacks
Sakelar ustack()
untuk jstack()
Jika aplikasi memiliki helper stack untuk memasukkan bingkai yang diterjemahkan (misalnya, frame node.js; lihat: http://dtrace.org/blogs/dap/2012/01/05/where-does -Mer-Program-Program-ITS-Time/). Tingkat untuk koleksi tumpukan tingkat pengguna sengaja lebih lambat dari kernel, yang sangat penting saat menggunakan jstack()
karena melakukan pekerjaan tambahan untuk menerjemahkan bingkai.
Gunakan program StackCollapse untuk melipat sampel tumpukan menjadi satu baris. Program yang disediakan adalah:
stackcollapse.pl
: untuk tumpukan dtracestackcollapse-perf.pl
: untuk output linux perf_events "perf skrip"stackcollapse-pmc.pl
: untuk FreeBSD PMCSTAT -G Stacksstackcollapse-stap.pl
: untuk tumpukan Systemtapstackcollapse-instruments.pl
: untuk instrumen xcodestackcollapse-vtune.pl
: Untuk profil intel vtunestackcollapse-ljp.awk
: Untuk profiler Java yang ringanstackcollapse-jstack.pl
: untuk output Java JStack (1)stackcollapse-gdb.pl
: untuk GDB (1) Stacksstackcollapse-go.pl
: untuk Golang PPROF Stacksstackcollapse-vsprof.pl
: Untuk profil Microsoft Visual Studiostackcollapse-wcp.pl
: untuk output wallclockprofilerContoh Penggunaan:
For perf_events:
$ ./stackcollapse-perf.pl out.perf > out.folded
For DTrace:
$ ./stackcollapse.pl out.kern_stacks > out.kern_folded
Output terlihat seperti ini:
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
[...]
Gunakan flamegraph.pl untuk membuat SVG.
$ ./flamegraph.pl out.kern_folded > kernel.svg
Keuntungan memiliki file input terlipat (dan mengapa ini terpisah dari flamegraph.pl) adalah Anda dapat menggunakan GREP untuk fungsi yang menarik. Misalnya:
$ grep cpuid out.kern_folded | ./flamegraph.pl > cpuid.svg
Contoh output dari linux "perf skrip" disertakan, gzip'd, sebagai contoh-perf-stacks.txt.gz. Grafik api yang dihasilkan adalah contoh-pert.svg:
Anda dapat membuat ini menggunakan:
$ gunzip -c example-perf-stacks.txt.gz | ./stackcollapse-perf.pl --all | ./flamegraph.pl --color=java --hash > example-perf.svg
Ini menunjukkan alur kerja khas saya: Saya akan GZIP profil pada target, lalu salin ke laptop saya untuk dianalisis. Karena saya memiliki ratusan profil, saya meninggalkannya!
Karena profil ini termasuk Java, saya menggunakan flamegraph.pl - -color = Java Palette. Saya juga menggunakan StackCollapse-perf.pl-semua, yang mencakup semua anotasi yang membantu flamegraph.pl menggunakan warna terpisah untuk kernel dan kode tingkat pengguna. Grafik api yang dihasilkan menggunakan: hijau == java, kuning == C ++, merah == Mode pengguna asli, oranye == kernel.
Profil ini berasal dari analisis kinerja vert.x. Klien benchmark, WRK, juga terlihat dalam grafik api.
Contoh output dari dtrace juga disertakan, contoh-dtrace-stacks.txt, dan grafik api yang dihasilkan, contoh-dtrace.svg:
Anda dapat menghasilkan ini menggunakan:
$ ./stackcollapse.pl example-stacks.txt | ./flamegraph.pl > example.svg
Ini dari investigasi kinerja tertentu: grafik api mengidentifikasi bahwa waktu CPU dihabiskan di modul LOFS, dan mengukur waktu itu.
Lihat pesan penggunaan (--help) untuk opsi:
Penggunaan: ./flamegraph.pl [opsi] 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
Seperti yang disarankan dalam contoh, grafik api dapat memproses jejak peristiwa apa pun, seperti malloc () S, asalkan jejak tumpukan dikumpulkan.
Jika Anda menggunakan opsi --cp
, itu akan menggunakan pilihan $ warna dan secara acak menghasilkan palet seperti normal. Setiap flamegraph di masa depan yang dibuat menggunakan opsi --cp
akan menggunakan peta palet yang sama. Simbol baru apa pun dari Future Flamegraphs akan memiliki warna yang dihasilkan secara acak menggunakan pilihan $ warna.
Jika Anda tidak suka palet, cukup hapus file palet.map.
Ini memungkinkan Anda untuk mengubah warna warna di antara flamegraphs untuk membuat perbedaan benar -benar menonjol.
Contoh:
Katakanlah kita memiliki 2 tangkapan, satu dengan masalah, dan satu saat bekerja (apa pun "itu" itu):
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.
Lihatlah Direktori Demo untuk sebuah contoh:
Palette-example-working.svg
Palette-Example-Broken.svg