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中的Mina进程?

    查找Mina进程的PID(进程ID)方法1:使用 ps 和 grep 组合ps -ef | grep mina或精准匹配(避免误杀):ps -ef | grep '[m]ina' # 方括号避免匹配到grep自身输出示例:ubuntu 12345 6789 0 10:30 ? 00:01:23……

    2025年7月6日
    18000
  • 在Linux系统中安装JDK的具体操作步骤和注意事项有哪些?

    在Linux系统上安装JDK(Java Development Kit)是进行Java开发的基础步骤,本文将详细介绍几种主流安装方法,包括使用包管理器、手动下载安装包以及通过SDKMAN工具管理,帮助不同需求的用户顺利完成安装,安装前检查:是否已存在JDK在安装新版本前,建议先检查系统是否已安装JDK,避免版本……

    2025年9月25日
    15600
  • linux 如何修复tf卡

    Linux 中,可先用 fsck 命令检查修复文件系统,如 `sudo

    2025年8月17日
    19200
  • linux 如何查看txt文件格式

    Linux 中,可以使用 file filename.txt 查看文件格式,或用 cat filename.txt、`less filename.

    2025年8月18日
    18500
  • Linux如何删除swp文件?

    在Linux系统中,swp文件是vim或vi编辑器自动生成的交换文件(swap file),主要用于在编辑过程中保存临时数据,防止意外退出导致内容丢失,这类文件通常以.filename.swp的形式命名(例如编辑test.txt时会产生.test.txt.swp),但当编辑器正常退出后,swp文件理应自动删除……

    2025年9月24日
    19100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信