33.perf工具使用

文章目录


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


基本介绍

Perf(Performance Counters for Linux,性能计数器子系统)是一个Linux性能分析工具,用于分析系统和应用程序的运行时性能。这个工具位于 Linux 内核源代码树中,具体位置在 tools/perf 目录下。虽然它是一个用户空间的应用程序,但却是唯一一个被包含在 Linux 内核源码中的复杂用户软件。

Perf可以帮助开发人员和系统管理员进行函数级和指令级的热点查找,可以用来分析程序中热点函数的CPU占用率,了解CPU性能计数器、内核跟踪点和硬件事件等信息,从而找到性能瓶颈,优化软件性能并诊断问题。

通过 perf 命令,我们可以获得系统在运行过程中的各种性能数据,例如 CPU 利用率、内存使用情况、磁盘 I/O 等。perf 可以用于多个方面的性能分析,以下是一些常用的用途:

  • CPU 性能分析 ,通过 perf命令,可以监测 CPU 的使用率、上下文切换次数、缓存命中率等指标,可以帮助开发者找出 CPU 性能瓶颈,优化程序的运行效率。
  • 内存性能分析perf 命令可以监测内存的使用情况,例如内存泄漏、内存碎片等问题,可以帮助开发者优化内存的管理,提高系统的稳定性。
  • 函数级别采样perf可以对程序进行函数级别的采样,从而了解程序的性能瓶颈在哪里。其基本原理是每隔一个固定时间,CPU 会产生一个中断,记录当前是哪个进程、哪个函数,然后给对应的进程和函数加一个统计值,从而知道 CPU 在某个进程或某个函数上花费了多少时间。

如果系统没有安装Perf,安装方式为:

sh 复制代码
sudo apt install linux-tools-common linux-tools-generic

查看是否安装成功:

sh 复制代码
perf --version
# perf version 5.15.148

权限设置,默认运行perf命令需要sudo权限,可以通过修改/etc/sysctt.conf文件进行设置

sh 复制代码
sudo vi /etc/sysctl.conf
# add line
kernel.perf_event_paranoid = 0

perf命令使用

命令格式为:

sh 复制代码
perf <options> subcommand <options/arguments>

perf支持很多subcommand选项,常用的子命令有:

  • annotate读取perf.data,展示带注释代码,实际使用发现展示的汇编代码
sh 复制代码
sudo perf annotate -f

# Percent│       xor    %r15d,%r15d
#        │       lea    0x9(%rsp),%rbp
#        │       testb  $0x3,0x90(%rsp)
#        │     ↓ je     96
#        │       swapgs
#        │       nop
#        │       xchg   %ax,%ax
#        │       mov    %cr3,%rax
#        │       bts    $0x3f,%rax
#        │       and    $0xffffffffffffe7ff,%rax
#        │       mov    %rax,%cr3
#        │       xchg   %ax,%ax
#        │       mov    $0x48,%ecx
  • list,展示perf命令可以用来评估程序性能的事件
sh 复制代码
sudo perf list -h

# Usage: perf list [<options>] [hw|sw|cache|tracepoint|pmu|sdt|metric|metricgroup|event_glob]

通过上面的命令可以查看事件类型,hwhardware硬件相关事件,PMUPerformance Monitoring Unit相关事件等

  • record,记录程序运行时的数据
sh 复制代码
sudo perf record -e cpu-clock -aR sleep 10

# [ perf record: Woken up 1 times to write data ]
# [ perf record: Captured and wrote 0.002 MB perf.data (~150 samples) ]
  • report,展示perf命令记录的数据
sh 复制代码
sudo perf report -i perf.data
  • stat查看具体某个事件相关的统计结果
sh 复制代码
sudo perf stat -e cpu-clock -aR sleep 10

#  Performance counter stats for 'sleep 10':

#               1.13 msec cpu-clock                 #    0.000 CPUs utilized          

#       10.002228914 seconds time elapsed

#        0.001793000 seconds user
#        0.000000000 seconds sys

statrecord子命令的主要区别是record会将结果保存到perf.data文件中,而stat是直接展示结果。

  • top是直接展示整个系统的CPU内存等使用情况
  • script读取perf.data数据,并展示迹输出trace out
子命令 作用
annotate 汇编代码及注释
list 查看所有事件
stat 查看某事件相关的性能数据
record 录制某事件相关的性能数据,并保存perf.data文件
report 加载perf.data文件
top 系统相关的性能数据
script perf.data相关的trace out

使用perf命令追踪一个正在运行的进程:

sh 复制代码
sudo perf stat --pid <pid>

reference

1.https://phoenixnap.com/kb/linux-perf#:~:text=The%20Linux%20perf%20tool%20is,and%20analyzing%20CPU%20event%20data.
2.https://cloud.tencent.com/developer/article/2228048

相关推荐
上学的小垃圾10 小时前
基于docker安装MySQL(openEuler系统)
linux·mysql·docker·容器
cui_ruicheng11 小时前
LangChain 应用开发(十四):Agent 上下文与记忆机制
服务器·人工智能·python·langchain
一直C12 小时前
Linux网络编程|HTTP协议详解(报文、请求方法、状态码)
linux·http·wireshark·vim·visual studio
爱喝水的鱼丶12 小时前
SAP-ABAP:ABAP 用户出口开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流·出口
博、、13 小时前
从零构建智慧场馆解决方案:架构设计与开发实践
大数据·运维
敢敢是只喵i13 小时前
给现有业务系统接 AI 助手,入口怎么选?网页聊天、自动化任务与本地 Agent 对比
运维·人工智能·ai·开源·自动化·安全架构
章老师说14 小时前
BFE v1.8.6 正式发布:AI 网关计费精细化、Claude 协议与会话亲和性升级
运维·人工智能·ai·负载均衡·ai-native
Brilliantwxx14 小时前
【Linux】 进程(10) 进程控制深度解析:创建、终止与等待
linux·运维·服务器·c语言·开发语言·网络
ai小陈14 小时前
FramePack图生视频云端部署实战:从单图输入到视频输出的完整流程
服务器·人工智能·安全·ai·音视频·gpu算力
欧米欧15 小时前
Linux基础指令上
linux·运维·服务器