性能工具之 FlameGraph 火焰图

简介: 其实很多类似 perf 的工具都能生成火焰图,像 systemtap/dtrace 之类的并且这个思路,现在在 js 优化、代码优化等各方面都有具体的应用了至于怎么理解?简单点说,就是看谁又平又宽

一、前言

很多人觉得火焰图炫酷

如果只从操作上来说,真是没什么难度,只比大象放冰箱稍微难点

这里演示一下 perf 结果怎么放冰箱,不,是怎么生成火焰图!

二、演示操作

第一步:随便录点啥,我这里是所有操作,主要是生成 perf.data 文件

[root@7DGroup FlameGraph]# perf record -F 99 -a -g -- sleep 60
[ perf record: Woken up 7 times to write data ]
[ perf record: Captured and wrote 1.868 MB perf.data (11880 samples) ]
[root@7DGroup FlameGraph]# ll
total 1924
drwxr-xr-x 7 root root    4096 Mar  4 07:42 FlameGraph
-rw------- 1 root root 1965540 Mar  4 08:45 perf.data

第二步:转换成输出文件

[root@7DGroup FlameGraph]# perf script > out.perf
[root@7DGroup FlameGraph]# ll
total 7460
drwxr-xr-x 7 root root    4096 Mar  4 07:42 FlameGraph
-rw-r--r-- 1 root root 5668491 Mar  4 08:46 out.perf
-rw------- 1 root root 1965540 Mar  4 08:45 perf.data

第三步:折叠栈信息

[root@7DGroup FlameGraph]# ./FlameGraph/stackcollapse-perf.pl out.perf > out.folded
[root@7DGroup FlameGraph]# ll
total 7576
drwxr-xr-x 7 root root    4096 Mar  4 07:42 FlameGraph
-rw-r--r-- 1 root root  115637 Mar  4 08:47 out.folded
-rw-r--r-- 1 root root 5668491 Mar  4 08:46 out.perf
-rw------- 1 root root 1965540 Mar  4 08:45 perf.data

第四步:生成SVG文件

[root@7DGroup FlameGraph]# ./FlameGraph/flamegraph.pl out.folded > kernel.svg
[root@7DGroup FlameGraph]# ll
total 7732
drwxr-xr-x 7 root root    4096 Mar  4 07:42 FlameGraph
-rw-r--r-- 1 root root  157603 Mar  4 08:48 kernel.svg
-rw-r--r-- 1 root root  115637 Mar  4 08:47 out.folded
-rw-r--r-- 1 root root 5668491 Mar  4 08:46 out.perf
-rw------- 1 root root 1965540 Mar  4 08:45 perf.data
[root@7DGroup FlameGraph]#

第五步:下载并打开 svg 文件

image.png

三、小结

其实很多类似 perf 的工具都能生成火焰图,像 systemtap/dtrace 之类的

并且这个思路,现在在 js 优化、代码优化等各方面都有具体的应用了

至于怎么理解?

简单点说,就是看谁又平又宽

目录
相关文章
|
Linux
如何看懂火焰图
如何看懂火焰图
1485 0
如何看懂火焰图
|
移动开发 Java 测试技术
iOS的App模块化编程的框架实现方案——BeeHive
BeeHive是用于iOS的App模块化编程的框架实现方案,吸收了Spring框架Service的理念来实现模块间的API耦合。
iOS的App模块化编程的框架实现方案——BeeHive
|
12月前
|
设计模式 关系型数据库 测试技术
进阶技巧:提高单元测试覆盖率与代码质量
【10月更文挑战第14天】随着软件复杂性的不断增加,确保代码质量的重要性日益凸显。单元测试作为软件开发过程中的一个重要环节,对于提高代码质量、减少bug以及加快开发速度都有着不可替代的作用。本文将探讨如何优化单元测试以达到更高的测试覆盖率,并确保代码质量。我们将从编写有效的测试用例策略入手,讨论如何避免常见的测试陷阱,使用mocking工具模拟依赖项,以及如何重构难以测试的代码。
398 4
|
小程序
Galacean Effects 2.0 带来了哪些新功能?
各位特效魔法师、创意小能手们,我们近期解锁了一系列超能力,或许会让你的创作如虎添翼,酷炫到飞起!✨🎉🎉
997 1
|
监控 搜索推荐 Java
实战:基于Java的实时数据流处理平台
实战:基于Java的实时数据流处理平台
|
开发工具 git
idea的git reset current branch to here操作详解
idea的git reset current branch to here操作详解
1554 1
|
机器学习/深度学习 安全 算法框架/工具
开源vs闭源,大模型的未来在哪一边?
开源vs闭源,大模型的未来在哪一边?
475 0
开源vs闭源,大模型的未来在哪一边?
|
前端开发 IDE JavaScript
使用editorconfig配置你的编辑器
使用editorconfig配置你的编辑器
使用editorconfig配置你的编辑器
|
存储 缓存 负载均衡
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
24724 64
图解一致性哈希算法,看这一篇就够了!
|
SQL 数据管理 数据库
【安装指南】从零开始:SQL Server 2019与SSMS完美安装攻略!
【安装指南】从零开始:SQL Server 2019与SSMS完美安装攻略!
586 0