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各编辑器保存文件终极指南?

    命令行编辑器Nano 编辑器保存操作:编辑完成后,按 Ctrl + O(Write Out),底部提示 File Name to Write: 时,按 Enter 确认文件名(默认使用打开时的文件名),看到 [ Wrote X lines ] 即保存成功,退出:按 Ctrl + X,Vim / Vi 编辑器保存……

    1天前
    400
  • 如何创建文件软链接到桌面?

    在Linux系统中,连接文件(Link)是文件管理的重要功能,分为软链接(Symbolic Link)和硬链接(Hard Link)两种类型,它们通过不同方式实现文件共享,提升系统灵活性和效率,以下是详细操作指南和原理说明:连接文件的作用与类型软链接(Symbolic Link)类似Windows的“快捷方式……

    3天前
    500
  • 如何用init 3优化Linux服务器?

    进入init 3的三种方法方法1:使用telinit命令(推荐)sudo telinit 3原理:telinit是切换运行级别的标准命令,向init进程发送指令,效果:系统立即终止图形界面(如GNOME/KDE),切换到纯命令行终端,验证:执行who -r查看当前运行级别(显示run-level 3),方法2……

    2025年6月13日
    1300
  • 如何安全下载Linux内核源代码?

    使用包管理器下载(推荐)此方法通过系统自带的包管理工具获取内核源码,自动处理依赖和版本匹配,适合大多数用户,步骤:更新软件包列表确保本地仓库信息最新:sudo apt update # Debian/Ubuntusudo dnf update # Fedora/CentOS Streamsudo yum upd……

    5天前
    700
  • 选U盘8GB够快吗?USB3.0影响安装速度?

    目标设备:确保电脑满足Linux发行版的硬件要求(如CPU、内存、存储空间),选择Linux发行版新手推荐:Ubuntu、Linux Mint(界面友好,社区支持完善),旧设备:Lubuntu、Xubuntu(轻量级,资源占用低),下载渠道:仅从官方镜像站获取(如ubuntu.com、fedoraproject……

    2025年7月9日
    1100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信