Ubuntu升级后系统崩溃?如何避免

Linux perf 是 Linux 内核内置的性能分析工具(全称 Performance Counters for Linux),它直接利用 CPU 的性能监控单元(PMU)和内核跟踪点,提供低开销、高精度的性能数据采集能力,无论是分析 CPU 瓶颈、内存访问、函数调用关系还是系统调用,perf 都是 Linux 性能调优的核心工具,下面从安装到实战详细说明其使用方法:


安装与基础准备

安装 perf

不同 Linux 发行版安装命令:

# CentOS/RHEL
sudo yum install perf
# Arch/Manjaro
sudo pacman -S perf

权限配置

部分功能需 root 权限或调整内核参数:

# 允许非 root 用户使用(需重启生效)
echo kernel.perf_event_paranoid=1 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

权限值说明
-1:无限制
0:允许内核分析(默认)
1:允许用户态分析(推荐)
2:仅基础计数


核心命令详解(附常用场景)

perf stat:实时统计事件

统计程序运行期间的 CPU 周期、缓存命中率等硬件事件:

# 统计 ls 命令的执行事件
perf stat ls
# 统计特定进程(PID=1234)的 L1 缓存命中率
perf stat -e L1-dcache-load-misses,L1-dcache-loads -p 1234

常用事件

  • cpu-cycles:CPU 周期数
  • cache-misses:缓存未命中次数
  • instructions:指令数(结合 cycles 计算 IPC)
  • context-switches:上下文切换次数

perf record + perf report:采样分析

Step 1:采集数据(生成 perf.data

# 监控整个系统 10 秒
sudo perf record -a -g -- sleep 10
# 监控指定进程(PID=1234),采样 CPU 使用
perf record -F 99 -p 1234 -g -- sleep 30

关键参数
-F 99:每秒采样 99 次(平衡精度与开销)
-g:记录调用栈(生成火焰图必备)
-a:监控所有 CPU

Step 2:生成报告

perf report --stdio     # 文本模式查看
perf report --tui       # 交互式界面(推荐)

报告解读

  • Overhead:该函数在采样中占比(性能热点)
  • Command:进程名
  • Shared Object:所属模块(如 libc.so, [kernel])

perf top:实时性能热力图

类似 top 命令的动态视图,实时显示消耗 CPU 的函数:

sudo perf top -g -F 1000  # 每秒采样 1000 次,显示调用栈

Ubuntu/Debian

E 调整事件类型,按 / 折叠展开调用栈。


perf trace:系统调用追踪

替代 strace 的低开销系统调用分析:

# 追踪进程 1234 的所有系统调用
perf trace -p 1234
# 统计 ls 命令的 syscall 耗时分布
perf trace --duration 1 -e 'syscalls:*' ls

高级实战技巧

▶ 生成火焰图(可视化性能瓶颈)

# 1. 采集数据(带调用栈)
perf record -F 99 -a -g -- sleep 30
# 2. 转换数据为可读格式
perf script > out.perf
# 3. 使用 FlameGraph 工具生成 SVG
git clone https://github.com/brendangregg/FlameGraph
cd FlameGraph
./stackcollapse-perf.pl < out.perf | ./flamegraph.pl > perf.svg

火焰图效果:
Ubuntu/Debian

解读技巧

  • 横向宽度 = 函数出现频率
  • 纵向深度 = 调用栈层级
  • 鼠标悬停显示函数名和占比

▶ 追踪内核事件

分析磁盘 I/O 延迟或调度事件:

# 监控块设备 I/O 请求(需 root)
sudo perf record -e block:block_rq_issue -a
# 查看可用的内核跟踪点
perf list | grep tracepoint

▶ 内存分析

检测缓存未命中问题:

# 统计进程缓存未命中率
perf stat -e cache-references,cache-misses -p 1234

常见问题解决

  1. perf 报错 “No permission to collect stats”
    → 执行 sudo sysctl kernel.perf_event_paranoid=1

  2. 采样数据过大导致 perf report 卡顿
    → 用 perf report --stdio > report.txt 导出文本分析

  3. 函数名显示为十六进制地址
    → 安装调试符号包(如 dbgsym/debuginfo


典型应用场景

场景 推荐命令组合
CPU 占用飙升分析 perf topperf record/report
程序首次运行卡顿 perf stat 统计 IPC 与缓存命中率
网络延迟问题定位 perf trace 追踪 socket 相关调用
多线程锁竞争 perf lock 分析锁等待时间

最佳实践:生产环境中先用 perf stat 定位异常事件类型,再用 perf record 深入采样。


perf 是 Linux 性能分析的瑞士军刀,从硬件事件到内核行为均可覆盖,掌握其核心命令组合(stat/record/report/top),配合火焰图可视化,能高效定位系统瓶颈,建议通过实际场景反复练习,结合手册 man perf 探索更多功能。

引用说明

  • Linux 内核文档:tools/perf/Documentation/
  • Brendan Gregg 性能分析指南:brendangregg.com/perf.html
  • FlameGraph 工具库:github.com/brendangregg/FlameGraph

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5128.html

(0)
酷番叔酷番叔
上一篇 2025年6月20日 15:26
下一篇 2025年6月20日 16:10

相关推荐

  • linux如何解压压缩zip文件怎么打开

    Linux中,可使用unzip命令解压zip文件,若未

    2025年8月9日
    1700
  • 如何远程连接Linux系统?方法步骤与工具使用指南

    远程连接Linux系统是服务器管理、远程开发和运维工作的核心技能,通过不同方式可实现对Linux服务器的图形界面或命令行访问,以下是主流远程连接方法的详细步骤及注意事项,帮助高效完成远程操作,SSH远程连接(命令行方式)SSH(Secure Shell)是Linux远程管理的首选协议,通过加密传输保障数据安全……

    2025年8月29日
    1000
  • 如何正确安装深度linux系统的详细步骤与方法有哪些?

    安装深度Linux(Deepin)是一个相对简单的过程,但为了确保顺利完成,需要提前做好准备工作并严格按照步骤操作,以下是详细的安装指南,涵盖从前期准备到安装完成的全流程,安装前的准备工作硬件检查确保电脑满足深度Linux的最低系统要求:CPU为x86架构(64位),内存至少4GB(推荐8GB以上),硬盘空间至……

    2025年8月23日
    1100
  • cdlinux如何拷贝到U盘

    cdlinux镜像文件用软碟通等工具打开,通过“启动”写入硬盘映像到

    2025年8月18日
    1200
  • 提权前如何做好信息收集?

    在Linux系统中,提权(Privilege Escalation)指用户从普通权限提升至更高权限(如root)的过程,必须强调:未经授权的提权属于违法行为,本文仅用于安全研究、渗透测试或系统防御学习,操作需在合法授权环境下进行,在尝试提权前,需全面收集系统信息:系统版本 uname -a # 内核版本cat……

    2025年6月14日
    3700

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信