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新建磁盘分区有哪些具体操作步骤?

    在Linux系统中,新建磁盘分区是管理存储空间的常见操作,无论是新增硬盘、调整现有分区布局,还是为特定应用(如数据库、虚拟机)预留空间,都需要掌握分区创建流程,以下是详细的操作步骤,涵盖准备工作、分区工具使用、格式化、挂载及配置等关键环节,准备工作:确认磁盘信息与工具选择在分区前,需明确目标磁盘的设备名及当前状……

    2025年9月25日
    15300
  • linux 如何设置挂载

    Linux 中,使用 mount 命令挂载设备或分区,如 `mount /

    2025年8月18日
    14000
  • Linux如何安全踢掉登录用户?

    通过终止用户进程踢出(推荐)方法1:使用 pkill 命令sudo pkill -9 -u <用户名>原理:终止该用户所有进程(包括登录会话),参数说明:-u <用户名>:指定目标用户,-9:发送SIGKILL信号强制终止,示例:踢出用户 johnsudo pkill -9 -u joh……

    2025年6月19日
    17200
  • Linux环境下如何判断当前是否已成功连接FTP服务器?

    在Linux系统中,判断是否成功连接到FTP服务器是网络管理、服务器运维和日常开发中的常见需求,FTP(File Transfer Protocol)作为一种传统的文件传输协议,其连接状态可通过多种工具和方法进行验证,涵盖命令行交互、网络状态检查、日志分析等多个维度,本文将详细介绍这些方法,帮助用户全面掌握Li……

    2025年8月23日
    14900
  • 为什么Linux权限如此重要?

    在Linux系统中,文件权限管理是系统安全和功能控制的核心机制之一,chmod(change mode)命令作为权限管理的关键工具,允许用户精确控制文件或目录的访问权限,以下内容将详细解析其使用方法、原理及注意事项,帮助您高效安全地管理系统资源,权限类型读(r):查看文件内容 / 列出目录内容写(w):修改文件……

    2025年7月29日
    18800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信