Linux CPU火焰图

Linux CPU火焰图

1、火焰图简介

火焰图(Flame Graph)是一种强大的性的性能分析工具,专门用于可视化cpu时间消耗咋各个函数栈上的情况,可以很快帮助开发这识别程序中的性能瓶颈和热点函数,从而有效的进行程序优化;

火焰图通常以SVG格式提供,可以在现在浏览器中直接打开并进行交互,用户可以通过点击感兴趣的区域来查看函数名称、源码行等详细信息;火焰图每一层代表一个函数调用,宽度对应该函数占用CPU的时间比例,越宽的火焰图代表函数及其子函数消耗的CPU时间越多,直观的展现了哪些函数占用了大部分CPU计算资源;

通常火焰图常用于分析函数执行的频繁程度、分析哪些函数经常阻塞、分析哪些函数频繁分别配内存;

Linux 火焰图凭借其独特的可视化方式和广泛的工具兼容性,已成为 Linux 性能分析领域的标准工具之一,对于快速定位和解决 CPU 性能问题具有极高价值。

2、火焰图类型

常见的火焰图包括on-cpu火焰图、off-cpu火焰图、内存火焰图、Hot/Cold火焰图、红蓝分叉火焰图

  • on-cpu火焰图:分析cpu占用时间,找出cpu占用高的函数,分析代码热路径,通常是固定频率采样cpu调用栈来获取采用数据
  • off-cpu火焰图:分析cpu阻塞时间,找出i/o、网络等阻塞、锁竞争、死锁等导致性能下降问题;通常是固定频率采用组的时间调用栈来获取采用数据;
  • 内存火焰图:分析内存申请释放韩式调用次数,可以找出内存泄露问题,内存占用高的对象申请内存多的函数;
  • Hot/Cold火焰图:on-cpu和off-cpu火焰图综合展示
  • 红蓝分叉火焰图:红色表示上升、蓝色表示下降;处理不同版本性能回退问题,一般是对比两个on-cpu火焰图

一般on-cpu火焰图适合分析cpu占用高的问题函数

off-cpu火焰图适合分析解决阻塞和锁竞争问题;

3、绘制火焰图

绘制火焰图需要root权限,一般绘制火焰图有三个步骤:事件采集—>堆栈折叠—>火焰图绘制

安装perf事件采用工具,需要使用root权限
apt install linux-tools-common

测试perf工具

perf record -F 99 -a -g -- sleep 10

再当前目录下会生成一个perf.data的文件;

perf常见的命令有以下几个:

  • perf top:实时查看当前系统进程的性能统计信息

  • perf stat:分析指定的程序性能情况

  • perf list:查看当前软硬件支持的采用性能事件

  • perf record:记录一段时间内系统或进程的性能事件

  • perf report:读取perf record生成的perf.data文件明显分析数据

  • 参数

    • -e 指定性能事件
    • -p 执行线程或进程pid,可指定多个没使用,号隔开
    • -u 收集指定用户数据
    • -a 收集所有cpu的系统数据
    • -F 每个cpu每秒的采用次数
    • -g 开启call-graph记录,及利用函数调用栈中的信息来追踪程序执行的路径和调用关系
    • -C 指定cpu
    • -c 事件发生指定次数后采用一次
    • -o 指定输出文件,默认输出文件为perf.data
    • -i 在perf report 中,指定要分析发文件
    # 指定分析3586号进程,每个cpu每秒采用99次,总共记录10s的数据
    perf record -F 99 -p 3586 -g -- sleep 10
    # report可以查看统计信息
    perf report -n --stdio
    
安装绘制火焰图绘制工具

Flame Graph 工程实现了一套生成火焰图的脚本,可以直接clone下来使用,地址< https://gitee.com/mirrors/FlameGraph.git>

堆栈折叠

使用perf script工具对采用数据perf.data进行解析

perf script -i perf.data &> perf.unflod

使用stackcollaps-perf.pl将perf解析的perf.unfold中的符号进行折叠

# 生成火焰图需要的统计信息
./FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folde 

最后使用flamegraph.pl工具生成火焰图;

./FlameGraph/flamegraph.pl perf.folde &> test_on_cpu.svg

可以将上数命令整合程一条指令

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

具体使用情况可参考https://www.yuque.com/linuxer/xngi03/dpd36gqgugnn8wtf?singleDoc#
参考地址:http://mp.weixin.qq.com/s?__biz=MzI3NDczNDM4MQ==&mid=2247484581&idx=1&sn=ebb47c00a0138dc8f8fb550113521652&chksm=eb0ec8e7dc7941f13e2e8dc8fb273bbf0c5bff90609c5c230673c64b1eaedb630c5cd42eff07&mpshare=1&scene=24&srcid=0427uBjTdJAiwi2crYmU167A&sharer_shareinfo=5e6d8f8d95d2c4d8262e8cf3108a76cb&sharer_shareinfo_first=5e6d8f8d95d2c4d8262e8cf3108a76cb#rd
专属学习链接:https://xxetb.xetslk.com/s/36yiy3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值