Linux的 linux-perl 工具
$ sudo perf record -F 81 -p 14301 -g -- sleep 20
上面的代码中,perf record
表示记录,-F 81
表示每秒81
次,-p 14301
是进程号,即对哪个进程进行分析,-g
表示记录调用栈,sleep 20
则是持续30秒。
为了便于阅读,
perf record
命令可以统计每个调用栈出现的百分比,然后从高到低排列。
$ sudo perf report -n --stdio
- 执行
sudo perf report -n
可以生成报告的预览。 - 执行
sudo perf report -n --stdio
可以生成一个详细的报告。 - 执行
sudo perf script
可以dump
出perf.data
的内容。
# 将 perf.data 的内容 dump 到 out.perf
$ sudo perf script > out.perf
生成火焰图
通常的做法是将
out.perf
拷贝到本地机器,在本地生成火焰图:
$ git clone --depth 1 https://github.com/brendangregg/FlameGraph.git
# 折叠调用栈
$ FlameGraph/stackcollapse-perf.pl out.perf > out.folded
# 生成火焰图
$ FlameGraph/flamegraph.pl out.folded > out.svg
生成火焰图可以指定参数,
–width
可以指定图片宽度,–height
指定每一个调用栈的高度,生成的火焰图,宽度越大就表示CPU
耗时越多。