工具介绍
perf
1 | perf支持命令非常多,常用的有以下几个 |
关于perf原理可查看:https://zhuanlan.zhihu.com/p/22194920
火焰图
perf工具生成的报告不够直观,可以使用https://github.com/brendangregg/FlameGraph 工具将采样结果生成火焰图,方便查看。
strace
采样进程系统系统调用情况。
示例
使用上述工具,采样一个程序的运行情况。
启动进程
启动本地实例,通过ps -ef | grep proc查找进程pid。使用perf采样数据
使用1
perf record -e task-clock -g -p pid // 采样进程的cpu使用详情。
其中-e task-clock表示采样各个任务占用cpu时间,-g表示获取任务间的调用链,-p pid表示采样指定进程。
可以通过CTRL+C可以结束采样,采样结束后会在本地路径生成一个名为perf.data的采样文件。使用perf查看报告
可以通过1
perf report -i perf.data //命令生成报告
其中-i perf.data表示指定数据源,perf.data是perf record的采样结果。
命令执行结果如下。+表示可以展开调用链,按下回车键即可。从下面结果我们就可以查看函数执行占用的cpu时间比例。使用火焰图
perf生成的报告可以查看结果,但是没有火焰图直观,可以通过https://github.com/brendangregg/FlameGraph 工具来生成,具体操作如下,执行下面几个命令生成svg文件。1
2
3
4
5
6
7perf script -i perf.data > perf.unfold
./FlameGraph/stackcollapse-perf.pl perf.unfold > perf.folded
./FlameGraph/flamegraph.pl perf.folded > perf.svg
上述命令可以通过管道简化为:
perf script -i perf.data | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > process.svg生成svg文件,可以将其在浏览器打开,查看火焰图,如下所示。
查看系统调用
执行1
strace -o output.txt -c -e trace=all -p pid
命令,将系统调用统计结果记录到output.txt文件中,按下CTRL+C可以结束跟踪,结果如下。