目录
一、perf 命令
让我们从 perf 命令(performance 的缩写)讲起,它是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的函数名以及调用栈(stack)。
通常,它的执行频率是 99Hz(每秒99次),如果99次都返回同一个函数名,那就说明 CPU 这一秒钟都在执行同一个函数,可能存在性能问题。
13204
是进程号
$ sudo perf record -F 99 -p 13204 -g -- sleep 30
上面的代码中,perf record
表示记录,-F 99
表示每秒99次,-p 13204
是进程号,即对哪个进程进行分析,-g
表示记录调用栈,sleep 30
则是持续30秒。
运行后会产生一个庞大的文本文件。如果一台服务器有16个 CPU,每秒抽样99次,持续30秒,就得到 47,520 个调用栈,长达几十万甚至上百万行。
举例:
sudo perf record -e cpu-clock -g -p 2548
-g 选项是告诉perf record额外记录函数的调用关系
-e cpu-clock 指perf record监控的指标为cpu周期
-p 指定需要record的进程pid
为了便于阅读,perf record
命令可以统计每个调用栈出现的百分比,然后从高到低排列。
$ sudo perf report -n --stdio
![](https://i-blog.csdnimg.cn/blog_migrate/4009fee702400ac8fb7e8aec1cdb963a.png)
这个结果还是不易读,所以才有了火焰图。
生成火焰图
1、Flame Graph项目位于GitHub上:https://github.com/brendangregg/FlameGraph
2、可以用git将其clone下来:git clone https://github.com/brendangregg/FlameGraph.git
我们