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#
专属学习链接:https://xxetb.xetslk.com/s/36yiy3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/1109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程 -- 简易TCP网络程序

一 字符串回响 1.1 核心功能 字符串回响程序类似于 echo 指令&#xff0c;客户端向服务器发送消息&#xff0c;服务器在收到消息后会将消息发送给客户端&#xff0c;该程序实现起来比较简单&#xff0c;同时能很好的体现 socket 套接字编程的流程。 1.2 程序结构 这个程序我们…

基于Zookeeper 简单实现分布式任务协调组件

优质博文&#xff1a;IT-BLOG-CN 一、什么是 Zookeeper ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。 它是一个为分布式应用提供一致性服务的软件&#xff0c;提…

【管理】杨三角模型

企业成功 成功 战略 X 组织能力 1&#xff09;组织能力对于企业的重要性是和战略一样的&#xff1b; 2&#xff09;组织能力必须与战略适配&#xff0c;才能共同造就企业的成功。 员工思维&#xff1a;员工愿不愿意参与战略落地的实践&#xff1f;员工每天所关心、追求和重视的…

【C++】哈希封装map与set

目录 前言&#xff1a; 一&#xff0c;底层哈希结构 1-1&#xff0c;迭代器的封装 1-2&#xff0c;哈希表的封装 二&#xff0c;unordered_map的封装 三&#xff0c;unordered_set的封装 前言&#xff1a; 上一篇文章说明了哈希结构&#xff0c;这一篇文章来说明如何使用…

安装WSL2

PS C:\Users\pc> wsl --set-default-version 2 有关与 WSL 2 关键区别的信息&#xff0c;请访问 https://aka.ms/wsl2操作成功完成。PS C:\Users\pc> wsl --update 正在检查更新。 已安装最新版本的适用于 Linux 的 Windows 子系统。PS C:\Users\pc> wsl --shutdownPS…

PyTorch深度解析:Tensor——神经网络的核心构建块

在深度学习和神经网络的研究与应用中&#xff0c;Tensor&#xff08;张量&#xff09;无疑是一个核心概念。特别是在PyTorch这一强大的深度学习框架中&#xff0c;Tensor更是扮演了举足轻重的角色。本文将深入探讨PyTorch中的Tensor&#xff0c;从其基本定义、特性、操作到实际…

回溯算法练习day.3

39.组合总和 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返…

uniapp Android 插件开发教程

一、下载uniapp提供的SDK Android 离线SDK - 正式版 | uni小程序SDK 二、在uniapp创建一个项目 查看包名&#xff1a;发行--> 原生app 云打包 三、进入dcloud官网 开发者中心 进入 应用管理 --> 我的应用 --> 点击应用名称-->各平台信息-->新增 这里需要这…

每日三个JAVA经典面试题(四十三)

1.如何在大数据环境下优化Java性能&#xff1f; 在大数据环境下优化Java性能涉及多个方面&#xff0c;包括调整JVM设置、代码优化和选择合适的工具和框架。以下是一些具体的优化建议&#xff1a; 调整JVM参数&#xff1a; 增加堆内存&#xff1a;通过调整-Xms&#xff08;堆起…

SQLite FTS3 和 FTS4 扩展(三十二)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite FTS5 扩展&#xff08;三十&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 概述 FTS3 和 FTS4 是 SQLite 虚拟表模块&#xff0c;允许用户执行 对一组文档进行全文搜索。最常见&#xff08;和最…

paddle.net怎么付款?paddle.net怎么订阅?

有需要的小伙伴可以使用Fomepay的卡进行订阅支付&#xff0c;我这里使用的是491090卡段&#xff0c;开卡步骤很简单&#xff0c;点击获取卡片 1、注册 2、填写姓名使用拼音或者英文名都可以 3、支付宝或者微信支付

【22.1】【22.2】【22.3】

【题解/标程】2022牛客寒假算法基础集训营 1 题解标程 【题解】2022牛客寒假算法基础集训营2 【题解】2022牛客寒假算法基础集训营3 九小时九个人九扇门 思路&#xff1a;数字根。知道后 f ( x y ) f ( f ( x ) f ( y ) ) f(xy)f(f(x)f(y)) f(xy)f(f(x)f(y)) &#xff…

● State Schema Evolution的平滑迁移策略

State Schema Evolution指的是在分布式系统或数据库中&#xff0c;随着业务需求的发展和变化&#xff0c;需要对存储的状态&#xff08;如数据库表结构、数据模型等&#xff09;进行升级或调整的过程。平滑迁移策略的目标是在不影响系统正常运行、尽量减少服务中断时间的前提下…

基于51单片机的数字万用表设计

基于51单片机的数字万用表设计 &#xff08;仿真&#xff0b;程序&#xff0b;原理图PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.能够切换测量电压、电流、电阻&#xff1b; 2.数码管实时显示测量值&#xff1b; 3.短路报警&#xff1b; 4.测量…

Vue.extend()和我的两米大砍刀

Vue.extends是什么&#xff1f; 一个全局API,用于注册并挂载组件。 传统的引用组件的方式是使用import直接引入&#xff0c;但是使用Vue.extends()也可以实现。 使用规则 <div id"mount-point"></div>// 创建构造器 var Profile Vue.extend({templat…

Spring 声明式事务控制

1. 编程式事务控制相关对象 1.1 PlatformTransactionManager PlatformTransactionManager 接口是 spring 的事务管理器&#xff0c;它提供了我们常用的操作事务的方法。 PlatformTransactionManager 是接口类型&#xff0c;不同的 Dao 层技术则有不同的实现类。例如:Dao层技…

Kibana启动报错:Kibana server is not ready yet

Kibana启动后&#xff0c;访问http://ip:5601后报错&#xff1a;Kibana server is not ready yet 原因1&#xff1a;Kibana和Elasticsearch的版本不兼容 解决方案&#xff1a;保持版本一致 原因2&#xff1a;Elasticsearch的服务地址和Kibana中配置的elasticsearch.hosts不同…

【数据结构】插值排序

插值排序&#xff08;Interpolation Search&#xff09;是一种用于在有序数组中查找特定元素的搜索算法。它是二分查找算法的改进版本&#xff0c;通过使用当前查找值与数组中值的比例来估计下一次查找的位置&#xff0c;而不是简单地取中点。 算法步骤 在开始搜索之前&#…

3分钟看懂Microchip 32位MCU CAN模块的配置

文章目录 CAN模块系统框图Microchip MCC Harmony下CAN模块配置选项CAN模块工作模式CAN模块中断模式CAN工作速率Bit Timing Calculation配置CAN 接收的配置CAN 发送的配置CAN 过滤器工作流程说明CAN 过滤器的配置 CAN模块系统框图 CAN的英文全称&#xff1a;Control Area Networ…