systemstap安装稍微有些复杂,需要kernel-debuginfokernel-debuginfo-commonkernel-devel

线上服务器安装的话,会有点困难。考虑到这个问题,systemstap提供了交叉编译的工具。

不过这篇主要介绍下perf

1
sudo perf top -e 'cycles' -s comm,pid

off-CPU 火焰图

1
2
3
4
5
6
7
8
9
# perf record -e sched:sched_stat_sleep -e sched:sched_switch \
-e sched:sched_process_exit -a -g -o perf.data.raw sleep 1
# perf inject -v -s -i perf.data.raw -o perf.data
# perf script -F comm,pid,tid,cpu,time,period,event,ip,sym,dso,trace | awk '
NF > 4 { exec = $1; period_ms = int($5 / 1000000) }
NF > 1 && NF <= 4 && period_ms > 0 { print $2 }
NF < 2 && period_ms > 0 { printf "%s\n%d\n\n", exec, period_ms }' | \
./stackcollapse.pl | \
./flamegraph.pl --countname=ms --title="Off-CPU Time Flame Graph" --colors=io > offcpu.svg

http://www.brendangregg.com/blog/2015-02-26/linux-perf-off-cpu-flame-graph.html

追踪所有系统调用

1
sudo perf record -e 'syscalls:sys_enter' -e 'syscalls:sys_exit' -a -o perf.data.raw

带时间戳

1
2
3
perf record -e syscalls:sys_enter -e syscalls:sys_exit -a -g -o perf.data.raw
sudo perf inject -v -s -i perf.data.raw -o perf.data
perf script -F comm,pid,tid,cpu,time,period,event,ip,sym,dso,trace