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
2019-07-24 实战火焰图分析CPU使用率解决JAVA应用线上性能问题
实战FlameGraph火焰图分析线上JAVA应用的CPU使用率异常
2281 0
|
Java Linux C++
用 CPI 火焰图分析 Linux 性能问题
作者:杨勇,吴一昊 ## 1. 什么是 CPI ?## 本小节讲述为什么使用 CPI 分析程序性能的意义。如果已经非常了解 CPI 对分析程序性能的意义,可以跳过本小节的阅读。 ### 1.
15688 0
|
Linux
如何看懂火焰图
如何看懂火焰图
677 0
如何看懂火焰图
|
10天前
|
存储 数据可视化
R语言优化交易系统:用平行坐标图可视化系统参数优化结果
R语言优化交易系统:用平行坐标图可视化系统参数优化结果
12 0
|
1月前
|
JavaScript
性能工具之 FlameGraph 火焰图
其实很多类似 perf 的工具都能生成火焰图,像 systemtap/dtrace 之类的 并且这个思路,现在在 js 优化、代码优化等各方面都有具体的应用了 至于怎么理解? 简单点说,就是看谁又平又宽
51 7
性能工具之 FlameGraph 火焰图
|
4月前
|
Ubuntu
代码性能展现 火焰图
代码性能展现 火焰图
36 0
|
7月前
|
缓存 监控 算法
利用可视化分析算法解析电脑屏幕监控软件性能瓶颈
想要通过可视化分析算法优化电脑屏幕监控软件性能嘛,有点复杂但还是挺关键的。提高软件的效率、减少资源占用,并提供更好的用户体验。以下是一些步骤,可以通过可视化分析算法帮助您优化电脑屏幕监控软件的性能——
141 3
|
8月前
|
Go
pprof新增的火焰图实现
pprof新增的火焰图实现
43 0
|
11月前
|
监控 数据可视化 前端开发
火焰图是怎么画出来的?Pyroscope源码解析之火焰图
火焰图简述火焰图(Flame Graph) 由Brendan Gregg在2011年创造,是一种可视化程序性能分析工具,它可以帮助开发人员追踪程序的函数调用以及调用所占用的时间,并且展示出这些信息。一般性解释火焰图的基本思想是将程序的函数调用栈转化为一个矩形的 “火焰” 形图像,每个矩形的宽度表示该函数所占用的比例,高度表示函数的调用深度(也就是递归调用的层数)。通过比较不同时间点的火焰图,可以快
333 0