perf + 火焰图分析软件性能

简介: perf + 火焰图分析软件性能

软件的性能分析,往往需要查看CPU耗时,了解瓶颈在哪里

1 安装perf 和 flamegraph

Ubuntu上通过源码安装perf:

// 安装必要的依赖项:
sudo apt-get install build-essential libelf-dev libunwind-dev
// 从官方网站下载perf源代码:
wget https://mirrors.edge.kernel.org/pub/linux/kernel/tools/perf/perf-<version>.tar.gz
//解压缩下载的文件:
tar -xzvf perf-<version>.tar.gz
//进入解压后的目录:
cd perf-<version>
// 编译并安装perf:
make
sudo make install
// 检查perf是否成功安装:
perf --version

flamegraph不需要安装,直接下载源码就可以使用其提供的脚本

https://github.com/brendangregg/FlameGraph

2 如何生成火焰图

// 1 检测进程
sudo perf record -F 99 pid -g -- sleep 30
对进程ID为181的进程进行采集,采集时间为60秒
执行期间不要退出上述代码中perf record表示记录,-F 99表示每秒99次
-p 13204是进程号,即对哪个进程进行分析,-g表示记录调用栈,sleep 30则是持续30秒
执行完这行指令后,会自动生成perf.data文件
// 2 解析数据
sudo perf script -i perf.data & > perf.unfold
// 3 符号进行折叠
./stackcollapse-perf.pl perf.unfold &> perf.folded
// 4 生成svg图
./flamegraph.pl perf.folded > perf-$(date +%Y%m%d-%H:%M:%S).svg
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15

在 Flamegraph 生成的火焰图中,每个矩形代表一个函数,矩形的宽度表示该函数占用 CPU 时间的比例,矩形的高度表示函数调用的深度

3 火焰图

火焰图是svg图片,可以与用户互动。

(1)鼠标悬浮

火焰的每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。下面是一个例子。

(2)点击放大

在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。

在 Flamegraph 生成的火焰图中,search 和 ic(inverted call tree)是两个非常有用的功能。

search 按钮可以用于在火焰图中搜索特定的函数或代码段。点击 search 按钮后,输入要搜索的函数或代码段的名称,即可在火焰图中定位到该函数或代码段的位置。这个功能非常方便,可以帮助用户快速地定位到感兴趣的函数或代码段。

ic(inverted call tree)按钮可以用于生成倒置的调用树。在默认情况下,Flamegraph 生成的是正常的调用树,即从上到下表示函数调用的层级关系。而倒置的调用树则是从下到上表示函数调用的层级关系。这个功能可以帮助用户更好地理解函数之间的调用关系,从而更好地进行性能分析和优化。

相关文章
|
Java Linux C++
用 CPI 火焰图分析 Linux 性能问题
作者:杨勇,吴一昊 ## 1. 什么是 CPI ?## 本小节讲述为什么使用 CPI 分析程序性能的意义。如果已经非常了解 CPI 对分析程序性能的意义,可以跳过本小节的阅读。 ### 1.
15818 0
|
Java
2019-07-24 实战火焰图分析CPU使用率解决JAVA应用线上性能问题
实战FlameGraph火焰图分析线上JAVA应用的CPU使用率异常
2349 0
|
7月前
|
存储 算法 测试技术
☆打卡算法☆LeetCode 133. 克隆图 算法解析
☆打卡算法☆LeetCode 133. 克隆图 算法解析
|
6月前
|
数据采集 算法 Java
Java数据结构与算法:图算法之广度优先搜索(BFS)
Java数据结构与算法:图算法之广度优先搜索(BFS)
|
6月前
|
算法 Java
Java数据结构与算法:图算法之深度优先搜索(DFS)
Java数据结构与算法:图算法之深度优先搜索(DFS)
|
7月前
|
算法 搜索推荐 数据挖掘
图计算中的图算法有哪些常见的类型?请举例说明每种类型的算法。
图计算中的图算法有哪些常见的类型?请举例说明每种类型的算法。
146 0
|
存储 算法 调度
基本的算法(续 1)之图算法下
基本的算法(续 1)之图算法
59 0
|
存储 算法 搜索推荐
基本的算法(续 1)之图算法上
基本的算法(续 1)之图算法
63 0
|
机器学习/深度学习 人工智能 算法
数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘。图算法,搜索算法等
数据挖掘18大算法实现以及其他相关经典DM算法:决策分类,聚类,链接挖掘,关联挖掘,模式挖掘。图算法,搜索算法等