Linux系统perf命令使用介绍,如何用此命令进行程序热点诊断和性能优化
Linux perf 命令使用指南:程序热点诊断与性能优化
perf 是 Linux 系统上一个强大的性能分析工具,它能够帮助开发者进行程序热点诊断和性能优化。下面详细介绍 perf 的使用方法。
1. perf 简介
perf (Performance Event Counters) 是 Linux 内核提供的性能分析工具,它基于硬件性能计数器、软件事件和跟踪点来收集系统和程序的性能数据。
主要功能包括:
- CPU 性能分析
- 函数级采样
- 缓存命中/缺失分析
- 分支预测分析
- 系统调用跟踪
- 动态追踪
2. 安装 perf
大多数 Linux 发行版中,perf 可以通过包管理器安装:
# Ubuntu/Debian
sudo apt-get install linux-tools-common linux-tools-generic linux-tools-$(uname -r)# CentOS/RHEL
sudo yum install perf# Arch Linux
sudo pacman -S perf
3. 基本使用方法
3.1 常用子命令
perf stat:统计事件计数perf record:记录性能数据perf report:分析记录的数据perf top:实时显示热点函数perf list:列出可用的事件perf annotate:注解汇编代码perf script:读取 perf.data 并显示跟踪内容
3.2 常用选项
-e:指定要监控的事件-p:指定进程ID-c:指定采样周期-g:记录调用图-F:指定采样频率-o:指定输出文件
4. 程序热点诊断实战
4.1 使用 perf stat 进行基本统计
# 统计程序运行时的基本性能指标
perf stat ./your_program# 统计特定进程的性能指标
perf stat -p <PID>
输出示例:
Performance counter stats for './your_program':1,234.56 msec task-clock # 0.987 CPUs utilized 12 context-switches # 0.010 K/sec 1 cpu-migrations # 0.001 K/sec 456 page-faults # 0.369 K/sec 3,456,789,012 cycles # 2.800 GHz 2,345,678,901 instructions # 0.68 insn per cycle 567,890,123 branches # 459.987 M/sec 12,345,678 branch-misses # 2.17% of all branches 1.250123456 seconds time elapsed
4.2 使用 perf record 和 perf report 进行热点分析
# 记录性能数据(默认采样CPU cycles事件)
perf record -g ./your_program# 分析记录的数据
perf report
perf report 会显示一个交互式界面,展示各函数的采样比例,按百分比排序,可以直观看到程序的热点函数。
4.3 使用 perf top 实时查看热点
# 实时监控系统热点函数
sudo perf top# 监控特定进程的热点
sudo perf top -p <PID>
4.4 高级采样分析
# 指定采样事件(如缓存缺失)
perf record -e cache-misses -g ./your_program# 指定采样频率(1000Hz)
perf record -F 1000 -g ./your_program# 多事件采样
perf record -e cycles,instructions,cache-misses -g ./your_program
5. 性能优化实战技巧
5.1 识别 CPU 热点
- 使用
perf record和perf report找到占用 CPU 时间最多的函数 - 检查这些函数的调用关系(使用
-g选项记录的调用图) - 分析热点函数的实现,寻找优化机会
5.2 分析缓存效率
# 分析缓存命中率
perf stat -e cache-references,cache-misses ./your_program# 记录L1缓存缺失
perf record -e L1-dcache-load-misses -g ./your_program
高缓存缺失率可能意味着数据结构布局不佳或访问模式不连续。
5.3 分析分支预测
# 分析分支预测失败率
perf stat -e branches,branch-misses ./your_program
高分支预测失败率可能意味着代码中有难以预测的条件分支。
5.4 火焰图可视化
火焰图是直观展示性能数据的强大工具:
# 生成火焰图
perf record -g ./your_program
perf script | stackcollapse-perf.pl | flamegraph.pl > perf.svg
需要先安装 FlameGraph 工具集:
git clone https://github.com/brendangregg/FlameGraph.git
export PATH=$PATH:$(pwd)/FlameGraph
6. 实际案例
案例1:优化矩阵乘法
-
记录性能数据:
perf record -g ./matrix_multiply -
分析报告发现热点在某个三重循环的内核函数
-
优化方法:
- 循环展开
- 调整循环顺序改善局部性
- 使用 SIMD 指令
案例2:减少缓存缺失
-
分析缓存行为:
perf record -e L1-dcache-load-misses -g ./my_app -
发现某个频繁访问的数据结构缓存缺失率高
-
优化方法:
- 重新排列数据结构成员
- 将频繁访问的数据放在一起
- 使用更紧凑的数据结构
7. 注意事项
-
需要 root 权限或设置
perf_event_paranoid值来访问所有功能:sudo sysctl -w kernel.perf_event_paranoid=-1 -
采样会影响程序性能,生产环境谨慎使用
-
对于短时间运行的程序,可能需要增加采样频率或使用
--no-inherit选项 -
分析时要考虑系统整体负载,避免干扰
通过合理使用 perf 工具,开发者可以精准定位性能瓶颈,有针对性地进行优化,显著提升程序性能。
相关文章:
Linux系统perf命令使用介绍,如何用此命令进行程序热点诊断和性能优化
Linux perf 命令使用指南:程序热点诊断与性能优化 perf 是 Linux 系统上一个强大的性能分析工具,它能够帮助开发者进行程序热点诊断和性能优化。下面详细介绍 perf 的使用方法。 1. perf 简介 perf (Performance Event Counters) 是 Linux 内核提供的…...
《Linux运维实战:Ubuntu 22.04使用pam_faillock实现登录失败处理策略》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:Linux运维实战总结 一、背景信息 在ubuntu 22.04中,pam_tally2模块已被弃用,取而代之的是pam_faillock模块。因此…...
AI Agent开发大全第八课-Stable Diffusion 3的本地安装全步骤
前言 就像我们前面几课所述,本系列是一门体系化的教学,它不像网上很多个别存在的单篇博客走“吃快餐”模式,而是从扎实的基础来带领大家一步步迈向AI开发高手。所以我们的AI课程设置是相当全面的,除了有牢固的基础知识外还有外面互联网上也搜不到的生产级实战。 前面讲过…...
Spring MVC 深度解析:原理、源码剖析与实战
Spring MVC 深度解析:原理、源码剖析与实战 在 Spring 体系中,Spring MVC 作为 Web 层的核心框架,承担着请求处理、参数解析、视图渲染等关键任务。今天,我们将深入剖析 Spring MVC 的执行流程,结合 源码分析…...
347 前k个高频元素
步骤1:统计元素频率 使用哈希表(unordered_map)统计每个元素的出现次数,时间复杂度为 O(n)。 步骤2:构建最小堆维护Top K 优先队列(最小堆):用priority_queue维护当前频率最高的k…...
BUUCTF-web刷题篇
1.EASYSQL破解密码 万能公式: 1 and 11 1 and 11 1 or 11 1 or 11 解释:payload SELECT * FROM tables WHERE username1 or 11 and password1 or 11 优先级排序:and 优先级高于 or,所以要计算 and 然后再计算 or username1…...
LeetCode 第31~33题
目录 LeetCode 第31题:下一个排列 LeetCode 第32题:最长有效括号 LeetCode 第33题:搜索旋转排序数组 LeetCode 第31题:下一个排列 题目描述 整数数组的一个排列就是将所有成员以序列或线性顺序排列。例如arr[1,2,3],以…...
【NLP 44、实践 ⑪ 用Bert模型结构实现自回归语言模型的训练】
目录 数据文件 一、模型定义 1.模型初始化 代码运行流程 2.前向传播,计算损失 ⭐ 代码运行流程 二、加载语料 代码运行流程 三、 随机生成样本 代码运行流程 四、建立模型 五、采样策略选择 代码运行流程 六、模型效果测试 代码运行流程 七、模型训练 代码运行流程 …...
Go 语言规范学习(1)
文章目录 IntroductionNotation示例(Go 语言的 if 语句): Source code representationCharacters例子:变量名可以是中文 Letters and digits Lexical elementsCommentsTokensSemicolons例子:查看程序所有的token Ident…...
ShapeCrawler:.NET开发者的PPTX操控魔法
引言 在当今的软件开发领域,随着数据可视化和信息展示需求的不断增长,处理 PPTX 文件的场景日益频繁。无论是自动化生成报告、批量制作演示文稿,还是对现有 PPT 进行内容更新与格式调整,开发者都需要高效的工具来完成这些任务。传…...
微信小程序如何接入直播功能
一、小程序直播开通背景 1.政府资质要求 政府的要求,小程序开通直播需要注册主体具备互联网直播的资质,普通企业需要《信息网络传播视听节目许可证》,表演性质的直播需要《网络文化经营许可证》,政府主体需要《社会信用代码》及…...
ArrayList<E>案例//定义一个方法,将价格低于3000的手机信息返回
import java.util.ArrayList;public class ArrayListphone {public static void main(String[] args){//定义一个方法,将价格低于3000的手机信息返回Phone p1new Phone("小米",1000);Phone p2new Phone("苹果",8000);Phone p3new Phone("锤…...
基于Spring Boot的停车场管理系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
慧通测控汽车智能座舱测试技术
一、引言 随着科技的飞速发展,汽车正从单纯的交通工具向智能化移动空间转变。智能座舱作为这一转变的核心体现,融合了多种先进技术,为用户带来前所未有的驾驶体验。从简单的信息娱乐系统到高度集成的人机交互、智能驾驶辅助以及车辆状态监测…...
Qt进程间通信:QSharedMemory 使用详解
1. 什么是 QSharedMemory? QSharedMemory 是 Qt 中用于进程间共享内存的类。它允许多个进程共享一块内存区域,从而避免数据传输时的 IO 操作,提高通信速度。通过共享内存,多个进程可以直接读写这块内存,而无需经过文件…...
kettle插件-rabbitmq插件
场景:kettle本身可以直接链接rabbitmq,但是需要配置rabbitmq开启mqtt协议,本次讲解下自定义开发组件RabbitMQ consumer,无需开启mqtt协议即可使用。 1、docker 安装rabbitmq 1)下载镜像 docker pull rabbitmq 2&…...
为Windows10的WSL Ubuntu启动sshd服务并使用Trae远程连接
Windows10的WSL Ubuntu,使用起来非常方便,但是美中不足的是,无法从Windows主机ssh到Ubuntu 。 解决的方法是在Ubuntu安装sshd服务 Ubuntu安装sshd服务 执行命令 sudo apt install openssh-server 安装好后,先本地测试&#x…...
【C#.NET】VS2022创建Web API项目
C# Web API 是一种基于 .NET 平台(包括但不限于.NET Framework 和 .NET Core)构建 HTTP 服务的框架,用于创建 RESTful Web 服务。REST(Representational State Transfer)是一种软件架构风格,它利用HTTP协议…...
体育直播系统趣猜功能开发技术实现方案
功能概述 趣猜功能是“东莞梦幻网络科技”体育直播系统源码中的互动功能,主播可以发起竞猜题目,观众使用虚拟货币进行投注,增加直播间的互动性和趣味性。所有货币均为虚拟货币,通过系统活动获取,不可充值提现。 数据…...
33.[前端开发-JavaScript基础]Day10-常见事件-鼠标事件-键盘事件-定时器-案例
1 window定时器 window定时器方法 setTimeout的使用 setInterval的使用 2 轮播消息提示 案例实战一 – 轮播消息提示 3 关闭隐藏消息 案例实战二 – 关闭隐藏消息 4 侧边栏展示 案例实战三 – 侧边栏展示 5 tab切换实现 案例实战四 – 登录框(作业)…...
C# 多标签浏览器 谷歌内核Csharp
采用框架 :FBrowserCEF3lib 视频演示:点我直达 成品下载: https://wwms.lanzouo.com/iYOd42rl8vje...
如何同步fork的更新
当你fork了一个代码仓库后,要将其与原始源码保持同步,可以按照以下步骤进行操作: 1. 添加原始仓库作为远程源 在本地命令行中,进入到你fork后的代码仓库目录,然后使用以下命令添加原始仓库(通常称为upstr…...
如何从0设计开发一款JS-SDK
一、前言 前端SDK是什么?前端SDK是为了帮助前端实现特定需求,而向开发者暴露的一些JS-API的集合,规范的SDK包括若干API实现、说明文档等 前端SDK其实很常见了,比如: UI组件库:通过封装一系列组件ÿ…...
linux实现rsync+sersync实时数据备份
1.概述 rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具 2.端口和运行模式 tcp/873 采用C/S模式(客户端/服务器模式) 3.特点 可以镜像保存整个目录和文件第一次全量备份(备份全部的文件),之后是增量备份(只备份变化的文件) 4. 数…...
【计算机网络】计算机网络协议、接口与服务全面解析——结合生活化案例与图文详解
协议、接口与服务 导读一、协议1.1 定义1.2 组成 二、接口三、服务3.1 定义3.2 服务与协议的区别3.3 分类3.3.1 面向连接服务于无连接服务3.3.2 可靠服务和不可靠服务3.3.3 有应答服务和无应答服务 结语 导读 大家好,很高兴又和大家见面啦!!…...
51c自动驾驶~合集26
我自己的原文哦~ https://blog.51cto.com/whaosoft/11968755 #大模型/Sora/世界模型之间是什么关系 1 什么是大模型 人工智能大模型(Artificial Intelligence Large Model,简称AI大模型)是指具有庞大的参数规模和复杂程度的机器学习模…...
【汽车传感系统架构:借助传感获取安全】
为了将车辆自动化提升到一个新的水平,设计人员研究了 LiDAR 等传感器选项的权衡,并着眼于传感系统架构。 本文引用地址:https://www.eepw.com.cn/article/202503/468584.htm 每年,约有 120 万人死于道路交通事故,还有…...
【NUUO 摄像头】(弱口令登录漏洞)
漏洞简介:NUUO 是NUUO公司的一款小型网络硬盘录像机设备。 NUUO NVRMini2 3.0.8及之前版本中存在后门调试文件。远程攻击者可通过向后门文件handle_site_config.php发送特定的请求利用该漏洞执行任意命令。 1.Fofa搜索语句: 在Fofa网站,搜索&…...
论文阅读笔记:Denoising Diffusion Probabilistic Models (3)
论文阅读笔记:Denoising Diffusion Probabilistic Models (1) 论文阅读笔记:Denoising Diffusion Probabilistic Models (2) 论文阅读笔记:Denoising Diffusion Probabilistic Models (3) 4、损失函数逐项分析 可以看出 L L L总共分为了3项…...
【设计模式】抽象工厂模式(含与工厂方法模式的对比)
本期我们来学习一下设计模式之抽象工厂模式,在软件开发中,工厂模式 和 抽象工厂模式 都用于创建对象,但它们的应用场景和实现方式有所不同。本文将基于 C 代码,分析抽象工厂模式的实现,并对比其与工厂方法模式的区别。…...
