性能分析之FlameGraph火焰图的生成

2020-03-11 12:48:55 浏览数 (1)

很多人觉得火焰图炫酷。

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

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

perf结果生成火焰图

  • 第一步:随便录点啥,我这里是所有操作,主要是生成perf.data文件。
代码语言:javascript复制
[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
  • 第二步:转换成输出文件
代码语言:javascript复制
[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
  • 第三步:折叠栈信息
代码语言:javascript复制
[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文件。
代码语言:javascript复制
[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文件。

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

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

至于怎么理解?简单点说,就是看顶部谁又平又宽。

没了。

svg

0 人点赞