zoukankan      html  css  js  c++  java
  • Linux中CPU性能分析工具perf简单使用(亲测可用)

    一、背景

    Linux系统出现性能瓶颈时,往往因个别函数长时间占用CPU造成,解决问题的第一步就是定位到引起问题的函数,perf就是这样的工具,它是Linux内核源码提供的工具。

    二、核心概念

    1. 数据采集
      perf通过采样的方式,记录CPU正在执行的函数名及函数的调用栈,通常采样频率是每秒99次,perf的数据采集有额外性能开销,所以不宜长时间使用。
      perf命令说明:
    sudo perf record -F 99 -p 13204 -g -- sleep 30
    # record 表示记录cpu的执行数据
    # -F:采样频率(次/秒)
    # -p:进程号
    # -g:输出调用栈数据
    # -- sleep:本次采样总时长(秒)
    
    1. 数据处理
      perf往往输出一个庞大的数据,肉眼无法直接分析,需要借助可视化工具FlameGraph将数据转换位浏览器可读的svg文件再供人眼阅读。

    2. 火焰图
      X轴:被采集命中的调用次数,在这个方向上若某个帧越宽,表示被采样命中的次数越多,其占用cpu的时间也就越长。
      Y轴:调用栈,每一帧代表一个函数调用,越上层的越先返回,最顶层的就是正在执行的,只有顶帧才具有分析价值
      注意:

    1.用户可以用鼠标阅读火焰图中栈帧的信息,还可以进行一些简单操作。
    2.火焰图中栈与栈帧的颜色没有特殊含义。
    3.在X轴方向上,函数是按字母顺序排列的,而不是时间。

    1. 若火焰图中出现平顶的栈,则说明这个栈的顶帧函数比较耗时,它就是性能分析的重点。
    2. 火焰图的局限性:

    1.调用栈很深时,perf只能返回局部的栈,不能提供完整的调用数据。
    2.对于匿名函数,系统会以内存地址给函数命名,存在随机性,可读性差,定位困难。

    三、案例实践

    1. 安装perf
    yum list perf
    yum -y install perf.x86_64
    
    1. 由于需要到github下载可视化分析工具FlameGraph,所以要先安装git
    yum list git
    yum -y install git.x86_64
    git clone https://github.com/JaxYoun/FlameGraph.git
    mv FlameGraph fg  //方便起见,重命名FlameGraph目录
    
    1. 采集、转换、可视化【root权限】
    perf record -F 99 -p 18733 -g -- sleep 30
    perf script -i perf.data &> perf.unfold
    fg/stackcollapse-perf.pl perf.unfold &> perf.folded
    fg/flamegraph.pl perf.folded > perf.svg
    
    1. 将perf.svg下载到本地用Chrome浏览器打开即可阅读。
  • 相关阅读:
    mysql对库,表,数据类型的操作以及完整性约束
    mysql数据库初步了解
    响应式及Bootstrap
    事件流丶事件对象
    JQuery初识(三 )
    JQuery初识(二)
    JQuery初识
    sencha touch tpl 实现按钮功能
    sencha touch 分享到微博扩展
    sencha touch 隐藏滚动条样式的几种方式
  • 原文地址:https://www.cnblogs.com/JaxYoun/p/12817867.html
Copyright © 2011-2022 走看看