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

Linux命令:perf

perf 命令

基本介绍

perf(Performance Counters for Linux)是 Linux 系统中用于性能分析的强大工具套件。它基于内核性能计数器(PMC),可以分析 CPU 使用率、内存访问、缓存命中率、分支预测等硬件级性能指标,是系统性能优化和故障诊断的核心工具。

资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://pan.quark.cn/s/d0fb20abd19a

语法

perf [--version] [--help] [OPTIONS] COMMAND [ARGS]

常用子命令

性能分析命令

  • perf stat:执行命令并收集性能统计信息
  • perf record:记录性能事件数据
  • perf report:分析记录的数据并生成报告
  • perf top:实时显示系统性能热点
  • perf probe:动态添加探测点

追踪命令

  • perf trace:追踪系统调用和函数调用
  • perf sched:分析调度器性能
  • perf lock:分析锁性能
  • perf mem:分析内存访问性能

其他命令

  • perf list:列出可用的性能事件
  • perf annotate:对代码进行注解分析
  • perf bench:运行性能基准测试
  • perf test:运行内置测试

常用选项

通用选项

  • -h, --help:显示帮助信息
  • -v, --version:显示版本信息
  • -e, --event=EVENT:指定要监控的性能事件
  • -p, --pid=PID:监控指定进程
  • -t, --tid=TID:监控指定线程
  • -C, --cpu=CPU:监控指定 CPU

perf record 选项

  • -o, --output=FILE:输出到指定文件
  • -g, --call-graph:记录调用图
  • -F, --freq=HZ:采样频率
  • -c, --count=NUM:事件计数阈值

perf stat 选项

  • -r, --repeat=N:重复执行 N 次
  • -n, --null:不执行命令,只显示统计
  • -a, --all-cpus:监控所有 CPU

使用示例

1. 查看可用的性能事件

perf list perf list|grepcache perf list|grepcpu

2. 执行命令并收集性能统计

perfstatlsperfstat-r3./myprogram perfstat-ecycles,instructions,cache-misses ./myprogram

输出示例:

Performance counter stats for './myprogram': 123,456,789 cycles:u # 0.500 GHz 234,567,890 instructions:u # 1.90 insn per cycle 1,234,567 cache-misses:u # 0.50% of all cache refs 12,345,678 cache-references:u 0.247839456 seconds time elapsed 0.123456789 seconds user 0.012345678 seconds sys

3. 记录性能数据

perf record-g./myprogram perf record-F99-g-p1234perf record-ecpu-clock,page-faults-operf.data ./myprogram

4. 分析记录的数据

perf report perf report-iperf.data perf report --call-graph=graph

5. 实时性能分析

perftopperftop-p1234perftop-ecycles

6. 追踪系统调用

perf tracelsperf trace-p1234perf trace-eopen,close,read,write

7. 分析内存访问性能

perf mem record ./myprogram perf mem report

8. 分析调度器性能

perf sched record ./myprogram perf sched report perf sched latency

9. 添加动态探测点

perf probe-x/bin/ls main perf probe-x./myprogram my_function

10. 代码注解分析

perf annotate perf annotate-smy_function

常用性能事件

CPU 事件

事件名称说明
cyclesCPU 周期数
instructions指令数
branches分支指令数
branch-misses分支预测失败数
cpu-clockCPU 时钟

缓存事件

事件名称说明
cache-references缓存引用次数
cache-misses缓存未命中次数
L1-dcache-loadsL1 数据缓存加载
L1-dcache-load-missesL1 数据缓存未命中
LLC-loads最后一级缓存加载
LLC-load-misses最后一级缓存未命中

内存事件

事件名称说明
page-faults缺页错误次数
major-faults主缺页错误
minor-faults次缺页错误

软件事件

事件名称说明
context-switches上下文切换次数
cpu-migrationsCPU 迁移次数
page-faults缺页错误
task-clock任务占用 CPU 时间

实用技巧

分析程序热点

perf record-g-F99./myprogram perf report--sort=dso,symbol

定位性能瓶颈

perfstat-ecycles,instructions,cache-misses,L1-dcache-load-misses ./myprogram

分析多线程程序

perf record-g-p$(pgrep-d','myprogram)perf report--threads=separate

生成火焰图

# 需要安装 FlameGraph 工具perf record-F99-g./myprogram perf script|./stackcollapse-perf.pl>out.perf-folded ./flamegraph.pl out.perf-folded>flame.svg

分析 Java 程序

perf record-g-p<java_pid>perf report --map-exec-name

分析内核性能

perf record-g-a-F99sleep10perf report

相关命令

  • perf-tools:额外的 perf 工具集
  • strace:系统调用跟踪
  • ltrace:库函数调用跟踪
  • valgrind:内存调试工具
  • gdb:GNU 调试器
  • top:实时系统监控
  • vmstat:虚拟内存统计
  • iostat:I/O 统计

注意事项

  1. 权限要求:大部分 perf 功能需要 root 权限
  2. 内核配置:需要内核支持性能计数器(CONFIG_PERF_EVENTS)
  3. 采样频率:过高的采样频率会影响系统性能
  4. 输出文件:perf.data 文件可能很大,注意磁盘空间
  5. 符号解析:需要安装调试符号包才能正确解析符号
  6. Java 程序:需要使用-XX:+PreserveFramePointer编译选项
  7. 安装方法
    • Debian/Ubuntu:apt-get install linux-tools-common linux-tools-$(uname -r)
    • CentOS/RHEL:yum install perf

总结

perf是 Linux 系统中功能强大的性能分析工具套件。它可以帮助开发者和系统管理员深入分析程序的性能瓶颈,包括 CPU 使用率、缓存命中率、内存访问模式等。通过perf的各种子命令,可以进行实时性能监控、性能数据记录和分析、代码热点定位等操作,是系统性能优化的必备工具。

http://www.jsqmd.com/news/883944/

相关文章:

  • 计算机科学论文降AI工具免费推荐:2026年计算机毕业论文知网AIGC超标4.8元一次过完整方案
  • 广州白云企业搬家选哪家?广州家盛搬家,老兵铁军铸就专业搬迁标杆 - 广州搬家老班长
  • 暗黑破坏神2存档编辑器:d2s-editor免费可视化编辑终极指南
  • AndroidStudio中文语言包在企业开发中的应用:团队协作、统一环境与最佳实践
  • eqMac技术架构解析:如何实现macOS系统级音频处理
  • 沈阳大润发购物卡回收专业指南 - 购物卡回收找京尔回收
  • PID调参太头疼?试试单神经元自适应PID,让控制器自己学习(附Python/Matlab对比)
  • 如何用BiliBiliCCSubtitle一键搞定B站字幕下载与转换:5步实现自动化字幕处理
  • PagerLayoutManager常见问题解决方案:RecyclerView高度设置与数据刷新终极指南 [特殊字符]
  • QKeyMapper完整教程:Windows免费按键映射工具的终极指南
  • Linux/Unix学习笔记(四)—— 进程管理
  • 【独家首发】DeepSeek边缘计算白皮书未公开章节:3类典型场景QoS SLA保障公式(含实测RTT抖动衰减模型)
  • GetStoreApp核心功能解析:离线部署Microsoft Store应用的5大优势
  • 2026 邯郸复兴区装修公司哪家好?邯郸靠谱装修公司推荐避坑指南 - 品牌智鉴榜
  • 如何快速上手无名杀:从零开始的网页版三国杀完全指南
  • Linux命令:stress
  • 3步实战:如何用cursor-free-vip彻底解决Cursor AI的API限制问题
  • 2026京东e卡如何臻选回收渠道?认准这几个关键维度 - 猎卡回收公众号
  • qobuz-dl 终极指南:三步搞定无损音乐下载的完整教程
  • ChestAgentBench全面解析:2500个医疗查询基准测试的构建与应用
  • Pearcleaner:macOS深度清理终极指南,让磁盘空间翻倍
  • 广州天河企业搬迁选哪家?广州家盛搬家公司,老兵铁军铸就专业搬迁标杆 - 广州搬家老班长
  • 【DeepSeek供应链安全红皮书】:20年安全专家亲授3大依赖风险检测法,97%企业尚未自查
  • 终极指南:3步快速上手开源Verilog仿真工具Icarus Verilog
  • 终极SillyTavern升级指南:5步安全更新你的AI聊天前端
  • 基于PIC单片机的智能电暖器控制器:多路调度、无线同步与能耗管理
  • DOTA数据集不只是‘更大’:拆解航空图像标注里的门道与价值
  • 别再硬编码了!用遗传算法(GA)优化生产排程的Python实战:从编码、调参到结果可视化
  • QQ群数据采集神器:3分钟批量获取精准社群信息,告别繁琐手动收集
  • Caffeine微服务架构中的应用场景与实践:5个关键应用场景解析