当前位置: 首页 > news >正文

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 提供了多种子命令,以下是一些常用的命令:

  1. 查看 CPU 性能计数器:
perf stat <command>

该命令会运行指定的命令并显示其 CPU 性能统计信息。

  1. 记录性能数据:
perf record -a

该命令会在系统上收集性能事件,-a 选项表示全局记录(包括所有 CPU)。该命令会在当前路径下生成perf.data

  1. 分析性能数据:
perf report

该命令会显示 perf record 收集到的数据的分析报告。读取当前路径下的perf.data文件。

  1. 跟踪特定进程:
perf trace -p <pid>

该命令会实时跟踪指定进程的系统调用。

实际应用场景

  1. 识别性能瓶颈:

使用 perf stat 监控程序的性能,以识别潜在的瓶颈,如 CPU 使用率、缓存命中率等。

  1. 函数级别性能分析:

使用 perf recordperf report,分析函数执行的耗时,帮助定位慢函数。

  1. 系统调用跟踪:

使用 perf trace 跟踪特定进程的系统调用,以分析 I/O 性能和系统调用的开销。

示例

  1. 统计命令执行的性能:
]# 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
  1. 记录整个系统的性能数据:
]# 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) ]
  1. 分析记录的数据:
[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 内核自带的性能分析工具&#xff0c;主要用于分析系统性能瓶颈和程序的性能问题。通过合理使用 perf 工具&#xff0c;可以有效地分析和优化系统性能。 安装 perf 在大多数 Linux 发行版中&#xff0c;perf 工具通常随内核源代码包一起…...

WordPress 禁用上传媒体图片自动生成缩略图及多尺寸图片教程

一、在 设置-媒体-媒体设置 中几个尺寸大小的设置不勾选或设置为 0&#xff0c;如下图&#xff1a; 二、找到主题文件 function.php 文件&#xff0c;打开后&#xff0c;在 <?php 后面添加如下代码&#xff1a; function.php 文件路径一般为&#xff1a;WordPress网站根目录…...

锥线性规划【分布鲁棒、两阶段鲁棒方向知识点】

1 锥线性对偶理论 本部分看似和分布鲁棒、两阶段鲁棒优化没什么关系&#xff0c;但值得优先学习&#xff0c;原因将在最后揭晓。 二阶锥 二阶锥&#xff08;second-order cone&#xff0c;又称ice-cream/Lorentz cone&#xff09;的形式为&#xff1a; 非负象限锥 半正定锥 …...

linux环境下的程序设计与git操作

目录 前言&#xff1a; 进度条小程序&#xff1a; 先介绍几个背景知识 代码实现 Git操作 总结 其他指令 前言&#xff1a; 本文将重点介绍1. linux下的程序设计&#xff0c;并使用linux下的几个函数接口。实现一个简单的小程序 2.本着开源精神&#xff0c;进行git操作。…...

Matlab中HybridFcn参数的用法

在 MATLAB 中&#xff0c;HybridFcn 参数允许你在全局优化&#xff08;如遗传算法 ga 或粒子群算法 particleswarm&#xff09;之后使用局部优化算法进一步微调解的精确度。HybridFcn 通过在全局优化找到的解基础上&#xff0c;进一步调用局部优化器&#xff0c;如 fmincon、pa…...

Leetcode 3316. Find Maximum Removals From Source String

Leetcode 3316. Find Maximum Removals From Source String 1. 解题思路2. 代码实现 题目链接&#xff1a;3316. Find Maximum Removals From Source String 1. 解题思路 这一题思路上的话就是一个动态规划的题目&#xff0c;我们仿照lcs&#xff0c;考察每一个位置是否可以…...

jeecg3版本的vue,离线启动

jeecg的vue2版本已经停止维护&#xff0c;所以只能用vue3的版本。3版本中使用的是pnpm&#xff08;npm的增强版本&#xff09;下载依赖。使用pnpm安装的node_modules&#xff0c;不能直接复制到离线主机中&#xff08;因为在 pnpm安装过程中&#xff0c;会给依赖的配置文件写死…...

C++的内存管理

[TOC} C的内存管理 各个区储存内容 1.栈 局部变量和在执行函数时&#xff0c;函数中创建的局部变量都会在栈上创建&#xff0c;函数执行结束时会被自动释放。从高地址向低地址储存。 2.堆 是new/malloc/calloc/realloc分配的代码块&#xff0c;需要手动释放。如果程序员没…...

YZ系列工具之YZ09:VBA_Excel之读心术

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套一部VBA手册&#xff0c;教程分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的…...

嵌入式系统---看门狗

在嵌入式系统中&#xff0c;看门狗定时器&#xff08;Watchdog Timer&#xff0c;WDT&#xff09;是一种常用的机制&#xff0c;用于检测和恢复系统在异常情况下的故障。如果系统因为某种原因&#xff08;如软件死循环&#xff09;而变得无响应&#xff0c;看门狗定时器可以自动…...

从MySQL5.7迁移到8.0时,有哪些重要的参数调整或新参数需要注意?

从 MySQL 5.7 迁移到 MySQL 8.0 时&#xff0c;有一些重要的参数调整和新参数需要注意。MySQL 8.0 引入了许多新功能和改进&#xff0c;同时也对一些现有参数进行了更改或废弃。 1. lower_case_table_names 说明: 控制表名是否区分大小写。重要性: 在迁移过程中&#xff0c;确…...

完整发布/上传uniapp Ios应用到App Store流程

使用uniapp打包&#xff0c;假如使用app store证书打包出来的ipa文件&#xff0c;需要上传到app store上才能上架。假如你还没有app store证书&#xff0c;还没有打包&#xff0c;你可以参考下面这篇文章&#xff0c;先创建打包证书再继续看这篇上架的教程&#xff1a;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 代码智能体的优势 选择代码智能体有以下几个关键原因&#xff0c;它们相较于使用类似JSON的字典输出具有显著优势&#xff1a; 1. 代码的高…...

中小型医院网站开发:Spring Boot入门

2 相关技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;…...

Java读取PDF后做知识库问答_SpringAI实现

​​​​​​​​​​​​​​ 核心思路&#xff1a; 简单来说&#xff0c;就是把PDF文件读取并向量化&#xff0c;然后放到向量存储里面&#xff0c;再通过大模型&#xff0c;来实现问答。 RAG&#xff08;检索增强生成&#xff09;介绍&#xff1a; 检索增强生成&#x…...

打开exe程序显示没有适当的访问权限

打开exe程序显示没有适当的访问权限 打开.exe可执行程序&#xff0c;显示Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。 解决方法 鼠标选中该文件或文件夹&#xff0c;右键单击选择属性&#xff0c;在弹出的属性选项卡中切换到安全选项卡&#xf…...

Python异步编程:使用`create_task`并发执行协程

Python异步编程&#xff1a;使用create_task并发执行协程 1. 什么是create_task&#xff1f;2. 为什么需要create_task&#xff1f;3. 如何使用create_task&#xff1f;3.1 基本用法3.2 任务的返回值 4. 注意事项5. 总结 在Python的异步编程中&#xff0c;asyncio库为我们提供了…...

从零开始搭建你的DolphinScheduler分布式任务调度平台实战指南

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…...

第五课:Python学习之if语句

判断&#xff08;if&#xff09;语句 目标 开发中的应用场景if 语句体验if 语句进阶综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的&#xff0c;我们每天都在做各种各样的选择&#xff0c;如果这样&#xff1f;如果那样&#xff1f;…… 程序中的判断 # 定义…...

群晖前面加了雷池社区版,安装失败,然后无法识别出用户真实访问IP

有nas的相信对公网都不模式&#xff0c;在现在基础上传带宽能有100兆的时代&#xff0c;有公网代表着家里有一个小服务器&#xff0c;像百度网盘&#xff0c;优酷这种在线服务都能部署为私有化服务。但现在运营商几乎不可能提供公网ip&#xff0c;要么自己买个云服务器做内网穿…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...