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 top 或 perf 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系统没有Perl怎么办?解决方法速查指南

    在Linux系统中,Perl是一种广泛使用的脚本语言,常用于系统管理、文本处理、自动化任务等,若系统未安装Perl,可能会导致依赖Perl的脚本或软件包无法运行,影响工作效率,解决这一问题可通过安装Perl或使用替代工具两种途径,具体需根据实际需求选择,安装Perl(推荐长期解决方案)大多数Linux发行版的官……

    2025年9月28日
    27500
  • Linux系统服务器远程登陆的具体操作步骤和方法是什么?

    Linux系统服务器的登录是运维工作的基础操作,掌握多种登录方式及安全配置不仅能提升效率,还能保障服务器安全,本文将详细介绍Linux服务器登录的常见方法、操作步骤及注意事项,SSH远程登录(最常用)SSH(Secure Shell)是目前Linux服务器远程登录的主流方式,通过加密传输数据,避免信息泄露,且支……

    2025年10月8日
    25400
  • Linux中如何创建软连接?

    在Linux系统中,软连接(符号链接)是一种特殊的文件类型,它类似于Windows系统中的快捷方式,指向另一个文件或目录的路径,软连接可以独立于源文件存在,即使源文件被移动或删除,软连接本身仍存在(但会失效),创建软连接的主要目的是方便访问、节省存储空间(特别是跨文件系统时)或管理分散的文件,本文将详细介绍在L……

    2025年10月4日
    23500
  • 如何修改linux中的日期

    Linux中,可以使用date命令修改系统日期,格式为`sudo date MMDD

    2025年8月19日
    26600
  • Linux系统如何找到命令行的具体方法?

    在Linux系统中,命令行(也称为终端、Shell或控制台)是系统管理的核心工具,通过它可以高效执行系统操作、管理文件、运行程序等,找到并使用命令行是Linux用户的基本技能,本文将详细介绍在不同场景下访问Linux命令行的方法,包括本地图形界面、纯文本界面、远程连接以及进阶技巧,本地图形界面下打开命令行大多数……

    2025年10月6日
    30000

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信