zoukankan      html  css  js  c++  java
  • 使用perf生成Flame Graph(火焰图)

      使用SystemTap脚本制作火焰图,内存较少时,分配存储采样的数组可能失败,需要编写脚本,还要安装kernel的debuginfo包。使用perf的话,相对来说要简单一些。不过在有kernel的debuginfo包的时候,采样显示的信息要更丰富一些。
      为了使用perf制作火焰图方便,我编写了下面的脚本,贴上来备忘,也方便需要的人。
      脚本如下:
    if [ $ # -ne 1 ];then
    echo "Usage: $0 seconds"
    exit 1
    fi

    perf record -a -g -o perf.data &

    PID = ` ps aux | grep "perf record" | grep -v grep | awk '{print $2}' `

    if [ -n "$PID" ]; then
    sleep $ 1
    kill -s INT $PID
    fi

    # wait until perf exite
    sleep 1

    perf script -i perf.data & > perf.unfold
    perl stackcollapse -perf.pl perf.unfold & > perf.folded
    perl flamegraph.pl perf.folded >perf.svg
      将上面的脚本保存为perf_flame_graph.sh。根据上面的Usage可以看出在执行的时候,只需要指定采样的时间,单位为秒。
      下面是我在测试机上制作的火焰图:

      我这里制作的火焰图没有指定具体的进程或线程,如果只想关注某个具体的进程,可以在pref record命令后面加上命令或者通过-p选项指定进程ID。更多的参数和选项参见man perf-record。
  • 相关阅读:
    【LeetCode】155. Min Stack 最小栈
    【Java】修改Eclipse默认编码
    负数取模
    【算法第四版笔记】1.1 基础编程模型
    【计算方法】02
    【计算方法】01
    【Java】Java8中List排序
    选择排序算法
    排序算法
    【Java】Eclipse修改JSP文件默认编码
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3313378.html
Copyright © 2011-2022 走看看