[转帖]火焰图基本使用教程

火焰,基本,使用,教程 · 浏览次数 : 0

小编点评

**火焰图基本使用教程** **1. 下载 FlameGraph 包** ``` git clone https://github.com/brendangregg/FlameGraph.git ``` **2. 使用 FlameGraph 脚本** **命令:** ``` perf script -i filename > out.perf -i filename ``` **参数:** * `filename`:要抓取性能分析数据的文件名。默认值为 `perf.data`。 **3. 生成火焰图** **命令:** ``` FlameGraph/stackcollapse-perf.pl out.perf > out.folded FlameGraph/flamegraph out.folded > out.svg ``` **参数:** * `out.perf`:保存性能分析数据的文件名。 * `out.folded`:保存火焰图的输出文件名。 **4. 探索火焰图** * `y` 轴表示调用栈,每一层代表一个函数。 * `x` 轴表示抽样数,每个函数被抽样几次。 * `彩色图` 表示函数按大小排序,显示每个函数占用的宽度最大。 * `平顶` 表示函数可能存在性能问题。 **5. 使用交互模式** * hover 鼠标悬浮在火焰图上,显示函数名、抽样次数和占用的抽样次数的百分比。 * 点击放大,水平放大某一层,显示详细信息。 * 使用 Ctrl+F 搜索函数名,快速查找想要查看的函数。 **6. 示例** ```python # 获取火焰图 flame_graph = FlameGraph("/path/to/flamegraph.svg") # 获取火焰图数据 data = flame_graph.read_data() # 打印火焰图数据 print(data) ``` **注意:** * 使用 FlameGraph 时,请注意颜色没有特殊含义。 * 可以在 `flame_graph/flamegraph.pl` 中添加 yderligere分析选项。

正文

火焰图基本使用教程

1. 基本流程

  • 下载FlameGrapth包:https://github.com/brendangregg/FlameGraph,无需安装,直接使用。也可以直接使用命令git clone https://github.com/brendangregg/FlameGraph.git

  • perf recocrd -g...

    (记得要加-g,这样才会保留调用栈)抓去性能分析数据,会生成perf.data文件,在第二次使用perf record..后,新生成的perf数据为perf.data,旧的perf数据变成了perf.data.old,仅保留最近两次perf数据。
    另外,perf抓取的调用栈信息可能存在部分问题,使用时请适当注意。

  • perf script -i filename > out.perf

    -i filename指定perf数据文件,默认为perf.data,该命令要在perf.data目录下使用。

  • FlameGraph/stackcollapse-perf.pl out.perf > out.folded

  • FlameGraph/flamegraph out.folded > out.svg

  • 简化命令:

    perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > out.svg

2. 火焰图含义

  • y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。
  • x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。
  • 火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。
  • 注意:颜色没有特殊含义

3. 互动性

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

  • 点击放大:在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。左上角会同时显示Reset Zoom,点击后图片会恢复原样。

  • 搜索

    Ctrl+F会显示出搜索框,可以搜索想找的函数

4. 示例

img

最顶层的函数g()占用 CPU 时间最多。d()的宽度最大,但是它直接耗用 CPU 的部分很少。b()c()没有直接消耗 CPU。因此,如果要调查性能问题,首先应该调查g(),其次是i()

另外,从图中可知a()有两个分支b()h(),这表明a()里面可能有一个条件语句,而b()分支消耗的 CPU 大大高于h()

5. 参考链接

</article>

与[转帖]火焰图基本使用教程相似的内容:

[转帖]火焰图基本使用教程

火焰图基本使用教程 1. 基本流程 下载FlameGrapth包:https://github.com/brendangregg/FlameGraph,无需安装,直接使用。也可以直接使用命令git clone https://github.com/brendangregg/FlameGraph.gi

[转帖]火焰上的JVM--用火焰图分析性能

https://zhuanlan.zhihu.com/p/374861737 目前有几种工具可用于分析应用程序的性能并显示结果。传统上,这些结果要么以某种表格形式显示,要么以平面形式显示,要么以树视图的形式显示。火焰图是比较新的,并采取一个新的角度来显示结果。此外,可以在不同的级别上生成火焰图;工具

[转帖]netflix火焰圖(profile + 轉為圖像)

本文转载自 ligeforrent 查看原文 2017-06-30 0 file/file/ 运维/运维/ profile/profile/ 图像/图像/ netnet 使用方法:利用google的lightweight-Java-profiler獲取java進程的profile(類hprof格式)

[转帖]使用火焰图(FlameGraph)分析程序性能

火焰图概念 火焰图(FlameGraph)是 svg 格式的矢量图,是先通过 perf 等工具分析得到结果,并将该结果生成的具有不同层次且支持互动的图片,看起来就像是火焰,这也是它的名字的由来。表现形式如下所示: 需要注意以下几点: 纵向(Y 轴)高低不平,表示的是函数调用栈的深度。每一层都是一个函

[转帖]flamegraph(火焰图)性能分析

`https://www.cnblogs.com/HadesBlog/p/13877761.html` 使用perf工具以及flamegraph可以将调试的程序运行栈以及在每个函数中停留的时间以火焰图的形式展现出来。 perf工具可以在内核源码tools/perf中编译安装。 make && mak

[转帖]Java使用火焰图查看系统瓶颈

场景 一般情况下,我们会对现有系统进行压测等方式,来了解系统最大的吞吐量等等,通过这种方式得知系统在生产环境下可扛住的压力,如果我们想了解在压测的链路过程中,是哪些地方执行时间过长,影响了系统的吞吐量,可以使用火焰图的方式来观察。 工具 生成火焰图需要两个工具: 1. async-profiler:

[转帖]systemtap - perf - 火焰图

https://www.cnblogs.com/hixiaowei/p/15580662.html 0. 火焰图生成框架 1. Capture stacks 2. Fold stacks 3. flamegraph.pl 1. perf (13条消息) 性能分析之profiling及火焰图_巷中人的

[转帖]Java FlameGraph 火焰图

http://www.wjhsh.net/xingzifei-p-7446264.html 上周一个偶然的机会听同事提到了Java FlameGraph,刚实验了一下,效果非常好。 一、什么是FlameGraph 直接看图说话。FlameGraph 是 SVG格式,矢量图,可以随意扩大缩小,看不清的

[转帖]A-Ops性能火焰图——适用于云原生的全栈持续性能监测工具

https://www.modb.pro/db/610990 对于开发及运维人员来讲,火焰图是一个经典的定位性能问题的方法。利用火焰图可以可视化系统资源(cpu占用、内存占用、调度、IO等)的占用情况,从而帮助技术人员快速定位资源异常使用的代码级根因,或者观察潜在性能劣化趋势,进而优化系统和应用的性

[转帖]【初探】java性能火焰图的生成

https://www.cnblogs.com/hama1993/p/10580581.html 一、前言 开始之前,你需要准备的环境: Linux系统机器或者虚拟机一台,里面需要安装的软件:git、jdk、perl。 二、简单介绍 java性能分析火焰图的所做的事情就是能够分析出java程序运行期