perf工具使用指导
linux perf工具使用指导
perf 是 Linux 内核自带的性能分析工具,主要用于分析系统性能瓶颈和程序的性能问题。通过合理使用 perf 工具,可以有效地分析和优化系统性能。
安装 perf
在大多数 Linux 发行版中,perf 工具通常随内核源代码包一起提供。可以通过以下命令安装:
Ubuntu/Debian:
sudo apt-get install linux-tools-$(uname -r)
CentOS/RHEL:
sudo yum install perf
基本用法
perf帮助文档:
]# perf --help用法: perf [--version] [--help] [OPTIONS] COMMAND [ARGS]最常用的 perf 命令有:annotate 读取 perf.data(由 perf record 创建)并显示带注释的代码archive 创建包含在 perf.data 文件中找到的带有 build-id 的目标文件的归档文件bench 基准测试套件的一般框架buildid-cache 管理 build-id 缓存buildid-list 列出 perf.data 文件中的 build-idc2c 共享数据 C2C/HITM 分析器config 获取和设置配置文件中的变量data 数据文件相关处理diff 读取 perf.data 文件并显示差异分析evlist 列出 perf.data 文件中的事件名称ftrace 内核 ftrace 功能的简单封装inject 过滤器,用于在事件流中添加附加信息kallsyms 在正在运行的内核中搜索符号kmem 追踪/测量内核内存属性的工具kvm 追踪/测量 KVM 客户操作系统的工具list 列出所有符号事件类型lock 分析锁事件mem 内存访问分析record 运行一个命令并将其性能数据记录到 perf.data 文件中report 读取 perf.data(由 perf record 创建)并显示分析报告sched 追踪/测量调度器属性(延迟)的工具script 读取 perf.data(由 perf record 创建)并显示跟踪输出stat 运行一个命令并收集性能计数器统计数据test 运行完整性测试timechart 可视化工作负载期间系统总体行为的工具top 系统性能分析工具version 显示 perf 二进制文件的版本probe 定义新的动态跟踪点trace 类似 strace 的工具参见 'perf help COMMAND' 以获取有关特定命令的更多信息。
perf 提供了多种子命令,以下是一些常用的命令:
- 查看 CPU 性能计数器:
perf stat <command>
该命令会运行指定的命令并显示其 CPU 性能统计信息。
- 记录性能数据:
perf record -a
该命令会在系统上收集性能事件,-a 选项表示全局记录(包括所有 CPU)。该命令会在当前路径下生成perf.data
- 分析性能数据:
perf report
该命令会显示 perf record 收集到的数据的分析报告。读取当前路径下的perf.data文件。
- 跟踪特定进程:
perf trace -p <pid>
该命令会实时跟踪指定进程的系统调用。
实际应用场景
- 识别性能瓶颈:
使用 perf stat 监控程序的性能,以识别潜在的瓶颈,如 CPU 使用率、缓存命中率等。
- 函数级别性能分析:
使用 perf record 和 perf report,分析函数执行的耗时,帮助定位慢函数。
- 系统调用跟踪:
使用 perf trace 跟踪特定进程的系统调用,以分析 I/O 性能和系统调用的开销。
示例
- 统计命令执行的性能:
]# perf stat ls
anaconda-ks.cfg keys notation
ca.crt kubeconfig perf.data.old
cirros-0.5.2-x86_64-disk.img kubeconfig.kubemark perf-tests.tar.gz
cosign kubectl-ko pki
create_project_harbor.sh kubesphere pull-image-ceph.sh
download-etcd.sh kubesphere1-conf push-image-ceph.sh
go kubesphere2-1-conf registry2.7.tar
go1.22.4.linux-amd64.tar.gz kubesphere-argoproj.tar rook-ceph
harbor kuboard-spray-resource.tar sockperf-3.8.tar.gz
helm minio test-del.tar
ip_add.txt MrDoc trivy
iperf3-3.1.7-3.el7_9.x86_64.rpm myproject trivy_0.53.0_Linux-64bit.rpm
iperf3-tools.sh netperf-2.7.0.tar.gz trivy-db.tar.gz
k8s1.23.15-kubesphere3.4.1 nginx-ingress-controller.tag.gzPerformance counter stats for 'ls':1.92 msec task-clock # 0.808 CPUs utilized 0 context-switches # 0.000 K/sec 1 cpu-migrations # 0.521 K/sec 261 page-faults # 0.136 M/sec <not supported> cycles <not supported> instructions <not supported> branches <not supported> branch-misses 0.002374917 seconds time elapsed0.000000000 seconds user0.002503000 seconds sys
- 记录整个系统的性能数据:
]# perf record -a -g -- sleep 10
[ perf record: Woken up 26 times to write data ]
[ perf record: Captured and wrote 7.078 MB perf.data (59077 samples) ]
- 分析记录的数据:
[root@harbor ~]# perf reportSamples: 59K of event 'cpu-clock', Event count (approx.): 14769250000 Children Self Command Shared Object Symbol
+ 96.81% 0.00% swapper [kernel.kallsyms] [k] start_cpu
+ 96.81% 0.01% swapper [kernel.kallsyms] [k] cpu_startup_entry
+ 96.65% 0.01% swapper [kernel.kallsyms] [k] arch_cpu_idle
+ 96.64% 0.01% swapper [kernel.kallsyms] [k] default_idle
+ 96.25% 96.25% swapper [kernel.kallsyms] [k] native_safe_halt
+ 69.10% 0.00% swapper [kernel.kallsyms] [k] start_secondary
+ 27.71% 0.00% swapper [kernel.kallsyms] [k] x86_64_start_kernel
+ 27.71% 0.00% swapper [kernel.kallsyms] [k] x86_64_start_reservations
+ 27.71% 0.00% swapper [kernel.kallsyms] [k] start_kernel
+ 27.71% 0.00% swapper [kernel.kallsyms] [k] rest_init0.39% 0.00% swapper [kernel.kallsyms] [k] irq_exit0.39% 0.00% swapper [kernel.kallsyms] [k] do_softirq0.39% 0.00% swapper [kernel.kallsyms] [k] call_softirq0.38% 0.07% swapper [kernel.kallsyms] [k] __do_softirq0.32% 0.00% swapper [kernel.kallsyms] [k] apic_timer_interrupt0.32% 0.00% swapper [kernel.kallsyms] [k] smp_apic_timer_interrupt0.32% 0.00% containerd-shim containerd-shim-runc-v2 [.] 0x000000000046b6c10.28% 0.00% runc [kernel.kallsyms] [k] async_page_fault0.28% 0.00% runc [kernel.kallsyms] [k] do_async_page_fault0.28% 0.00% runc [kernel.kallsyms] [k] trace_do_page_fault0.28% 0.03% runc [kernel.kallsyms] [k] __do_page_fault0.28% 0.00% runc runc [.] runtime.goexit.abi00.26% 0.00% runc runc [.] runtime.main0.25% 0.01% runc [kernel.kallsyms] [k] handle_mm_fault0.23% 0.00% runc [kernel.kallsyms] [k] native_flush_tlb_others0.22% 0.00% containerd-shim containerd-shim-runc-v2 [.] 0x00000000004698ca0.22% 0.21% runc [kernel.kallsyms] [k] smp_call_function_many0.18% 0.00% containerd-shim containerd-shim-runc-v2 [.] 0x000000000087eeeb0.17% 0.00% containerd-shim [kernel.kallsyms] [k] system_call_fastpath0.16% 0.00% runc [kernel.kallsyms] [k] do_wp_page0.16% 0.00% runc [kernel.kallsyms] [k] wp_page_copy.isra.730.16% 0.00% runc:[2:INIT] [kernel.kallsyms] [k] async_page_fault0.16% 0.01% runc:[2:INIT] [kernel.kallsyms] [k] __do_page_fault0.16% 0.00% runc:[2:INIT] [kernel.kallsyms] [k] do_async_page_fault0.16% 0.00% runc:[2:INIT] [kernel.kallsyms] [k] trace_do_page_fault0.15% 0.00% runc [kernel.kallsyms] [k] ptep_clear_flush0.15% 0.00% runc [kernel.kallsyms] [k] flush_tlb_page
其他用法
不同的子命令有更详细的用法,请通过perf COMMAND --help 或者perf help COMMAND查看。
注意事项
- 使用
perf时,某些操作可能需要 root 权限,特别是全局记录和跟踪系统调用。 - 在高负载系统中,
perf可能会对性能产生一定影响,建议在性能测试或故障排查时使用。
相关文章:
perf工具使用指导
linux perf工具使用指导 perf 是 Linux 内核自带的性能分析工具,主要用于分析系统性能瓶颈和程序的性能问题。通过合理使用 perf 工具,可以有效地分析和优化系统性能。 安装 perf 在大多数 Linux 发行版中,perf 工具通常随内核源代码包一起…...
WordPress 禁用上传媒体图片自动生成缩略图及多尺寸图片教程
一、在 设置-媒体-媒体设置 中几个尺寸大小的设置不勾选或设置为 0,如下图: 二、找到主题文件 function.php 文件,打开后,在 <?php 后面添加如下代码: function.php 文件路径一般为:WordPress网站根目录…...
锥线性规划【分布鲁棒、两阶段鲁棒方向知识点】
1 锥线性对偶理论 本部分看似和分布鲁棒、两阶段鲁棒优化没什么关系,但值得优先学习,原因将在最后揭晓。 二阶锥 二阶锥(second-order cone,又称ice-cream/Lorentz cone)的形式为: 非负象限锥 半正定锥 …...
linux环境下的程序设计与git操作
目录 前言: 进度条小程序: 先介绍几个背景知识 代码实现 Git操作 总结 其他指令 前言: 本文将重点介绍1. linux下的程序设计,并使用linux下的几个函数接口。实现一个简单的小程序 2.本着开源精神,进行git操作。…...
Matlab中HybridFcn参数的用法
在 MATLAB 中,HybridFcn 参数允许你在全局优化(如遗传算法 ga 或粒子群算法 particleswarm)之后使用局部优化算法进一步微调解的精确度。HybridFcn 通过在全局优化找到的解基础上,进一步调用局部优化器,如 fmincon、pa…...
Leetcode 3316. Find Maximum Removals From Source String
Leetcode 3316. Find Maximum Removals From Source String 1. 解题思路2. 代码实现 题目链接:3316. Find Maximum Removals From Source String 1. 解题思路 这一题思路上的话就是一个动态规划的题目,我们仿照lcs,考察每一个位置是否可以…...
jeecg3版本的vue,离线启动
jeecg的vue2版本已经停止维护,所以只能用vue3的版本。3版本中使用的是pnpm(npm的增强版本)下载依赖。使用pnpm安装的node_modules,不能直接复制到离线主机中(因为在 pnpm安装过程中,会给依赖的配置文件写死…...
C++的内存管理
[TOC} C的内存管理 各个区储存内容 1.栈 局部变量和在执行函数时,函数中创建的局部变量都会在栈上创建,函数执行结束时会被自动释放。从高地址向低地址储存。 2.堆 是new/malloc/calloc/realloc分配的代码块,需要手动释放。如果程序员没…...
YZ系列工具之YZ09:VBA_Excel之读心术
我给VBA下的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套一部VBA手册,教程分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的…...
嵌入式系统---看门狗
在嵌入式系统中,看门狗定时器(Watchdog Timer,WDT)是一种常用的机制,用于检测和恢复系统在异常情况下的故障。如果系统因为某种原因(如软件死循环)而变得无响应,看门狗定时器可以自动…...
从MySQL5.7迁移到8.0时,有哪些重要的参数调整或新参数需要注意?
从 MySQL 5.7 迁移到 MySQL 8.0 时,有一些重要的参数调整和新参数需要注意。MySQL 8.0 引入了许多新功能和改进,同时也对一些现有参数进行了更改或废弃。 1. lower_case_table_names 说明: 控制表名是否区分大小写。重要性: 在迁移过程中,确…...
完整发布/上传uniapp Ios应用到App Store流程
使用uniapp打包,假如使用app store证书打包出来的ipa文件,需要上传到app store上才能上架。假如你还没有app store证书,还没有打包,你可以参考下面这篇文章,先创建打包证书再继续看这篇上架的教程:https://…...
CodeActAgent :Executable Code Actions Elicit Better LLM Agents解读
论文地址 https://arxiv.org/pdf/2402.01030.pdf 项目地址 https://github.com/svjack/CodeActAgent-Gradio/blob/main/README.md 代码智能体的优势 选择代码智能体有以下几个关键原因,它们相较于使用类似JSON的字典输出具有显著优势: 1. 代码的高…...
中小型医院网站开发:Spring Boot入门
2 相关技术简介 2.1 Java技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,…...
Java读取PDF后做知识库问答_SpringAI实现
核心思路: 简单来说,就是把PDF文件读取并向量化,然后放到向量存储里面,再通过大模型,来实现问答。 RAG(检索增强生成)介绍: 检索增强生成&#x…...
打开exe程序显示没有适当的访问权限
打开exe程序显示没有适当的访问权限 打开.exe可执行程序,显示Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。 解决方法 鼠标选中该文件或文件夹,右键单击选择属性,在弹出的属性选项卡中切换到安全选项卡…...
Python异步编程:使用`create_task`并发执行协程
Python异步编程:使用create_task并发执行协程 1. 什么是create_task?2. 为什么需要create_task?3. 如何使用create_task?3.1 基本用法3.2 任务的返回值 4. 注意事项5. 总结 在Python的异步编程中,asyncio库为我们提供了…...
从零开始搭建你的DolphinScheduler分布式任务调度平台实战指南
文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问,结合内…...
第五课:Python学习之if语句
判断(if)语句 目标 开发中的应用场景if 语句体验if 语句进阶综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的,我们每天都在做各种各样的选择,如果这样?如果那样?…… 程序中的判断 # 定义…...
群晖前面加了雷池社区版,安装失败,然后无法识别出用户真实访问IP
有nas的相信对公网都不模式,在现在基础上传带宽能有100兆的时代,有公网代表着家里有一个小服务器,像百度网盘,优酷这种在线服务都能部署为私有化服务。但现在运营商几乎不可能提供公网ip,要么自己买个云服务器做内网穿…...
保姆级教程:在ArcGIS Pro插件中集成你的自定义工具箱(以‘消除重复要素’为例)
从脚本到按钮:ArcGIS Pro插件开发实战指南 在GIS日常工作中,我们常常会遇到一些重复性的数据处理任务。比如数据质检环节的"消除重复要素"操作,虽然可以通过Python脚本实现,但每次都需要打开IDE或Python窗口执行代码&am…...
数组专项(一):数组排序、去重、查找
大家好,欢迎来到《算法面试60讲(2026最新版全真题带解析)》第19篇!上一篇我们彻底吃透了字符串专项的核心难点——BF暴力匹配与KMP高效匹配算法,搞定了字符串模块面试最难的算法考点。从本节课开始,我们正式进入算法面试第一高频模块:数组专项。 在算法面试中,数组是出…...
别再用SonarQube凑数了!DeepSeek原生圈复杂度引擎的6大颠覆性能力(含GitHub私有部署密钥)
更多请点击: https://kaifayun.com 第一章:DeepSeek圈复杂度分析的底层原理与范式革命 DeepSeek圈复杂度分析并非传统McCabe度量的简单复刻,而是基于控制流图(CFG)动态重构与语义感知路径裁剪的双重机制构建的新范式。…...
告别数据饥荒:用PyTorch手把手实现原型网络(Prototypical Networks)做电影评论情感分类
告别数据饥荒:用PyTorch手把手实现原型网络做电影评论情感分类 在自然语言处理领域,情感分析一直是热门研究方向,但现实中的开发者常面临一个尴尬困境:标注数据太少。传统深度学习方法动辄需要成千上万的标注样本,而实…...
Sora 2 MOV导出画质崩坏真相:HDR10元数据丢失、BT.2020色域截断、帧率标志位误写——3大隐性缺陷紧急修复方案
更多请点击: https://intelliparadigm.com 第一章:Sora 2 MOV导出画质崩坏的系统性认知 Sora 2 在生成高保真视频后,导出为 MOV 格式时频繁出现色度抽样失真、动态范围压缩、帧间伪影加剧等现象,其本质并非单一环节失效ÿ…...
Arcmap实操:如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例
Arcmap实操:如何用‘渔网’给你的地图做一次‘CT扫描’——以韶关市路网密度可视化为例 想象一下,医生通过CT扫描将人体内部结构分层呈现,而GIS中的"渔网"工具同样能对城市路网进行"切片式"分析。这种空间离散化技术&…...
榨干Codex!OpenAI工程师亲授Codex真正用法
你可能把 Codex 当编程助手用,改改代码,跑跑测试。但它的能力远不止于此。OpenAI 的客户支持工程师 Jason(jxnlco)告诉你,Codex 其实是一套完整的电脑工作系统,从语音输入到自动化,从浏览器操控…...
别再死记公式了!用Python手写一个卷积层,彻底搞懂CNN里的‘卷’是怎么算的
用Python手写卷积层:从零理解CNN的"卷"运算 当你第一次看到卷积神经网络(CNN)的数学公式时,那些复杂的符号和下标是否让你望而却步?作为计算机视觉领域的基石,CNN的核心在于理解卷积运算的本质。本文将带你用NumPy从零实…...
如何深度定制索尼相机:Sony-PMCA-RE逆向工程工具完整指南
如何深度定制索尼相机:Sony-PMCA-RE逆向工程工具完整指南 【免费下载链接】Sony-PMCA-RE Reverse Engineering Sony Digital Cameras 项目地址: https://gitcode.com/gh_mirrors/so/Sony-PMCA-RE 索尼相机逆向工程工具Sony-PMCA-RE是一款专业的开源工具&…...
微信红包助手终极指南:无需ROOT的智能抢红包解决方案
微信红包助手终极指南:无需ROOT的智能抢红包解决方案 【免费下载链接】WeChatLuckyMoney :money_with_wings: WeChats lucky money helper (微信抢红包插件) by Zhongyi Tong. An Android app that helps you snatch red packets in WeChat groups. 项目地址: ht…...
