Appearance
perf top —— 实时性能监控
更新时间:2026-08-06
perf top 实时显示系统或进程中函数级的 CPU 热点分布,类似 top 命令,但不看进程而看函数——回答"CPU 现在在忙什么函数"。
关联:perf-stat.md(整体统计)、perf-record.md(离线采样)
一、perf top 能回答什么问题
| 问题 | 选项 |
|---|---|
| 系统当前哪个函数最占 CPU? | perf top |
| 某个进程里什么函数在消耗 CPU? | perf top -p <pid> |
| 内核在忙什么? | perf top -k(仅内核符号) |
| 只看用户态函数? | perf top -e cycles:u |
| 实时看缓存未命中在哪个模块? | perf top -e cache-misses |
二、基本使用
bash
# 全系统实时热点
perf top
# 监控指定进程
perf top -p <pid>
# 监控指定线程
perf top -t <tid>
# 以指定频率刷新
perf top -F 99TUI 界面
bash
Samples: 12K of event 'cycles', 4000 Hz, Event count (approx.): 1234567890 lost: 0/0 drop: 0/0
Overhead Shared Object Symbol
45.23% your_program [.] hot_function
12.34% libc-2.31.so [.] __memcpy_avx_unaligned
8.91% your_program [.] helper
5.67% [kernel] [k] do_syscall_64
3.21% your_program [.] cold_function
...| 列 | 含义 |
|---|---|
| Overhead | 该函数占采样总量的百分比 |
| Shared Object | 函数所在的 .so / 可执行文件 / [kernel] |
| Symbol | 函数名([.] 用户态,[k] 内核态) |
TUI 操作键
| 按键 | 作用 |
|---|---|
h / ? | 帮助 |
↑ ↓ | 移动光标 |
a | 对选中函数进入 annotate(汇编视图) |
d / e | 放大/缩小 |
P | 显示调用者信息(Expand callchain) |
E | 展开/折叠全部 |
s | 切换到指定事件 |
q | 退出 |
三、常用选项
| 选项 | 含义 | 示例 |
|---|---|---|
-e <event> | 指定采样事件 | -e cache-misses |
-p <pid> | 仅监控某进程 | -p 12345 |
-t <tid> | 仅监控某线程 | -t 12346 |
-a | 全系统(默认) | — |
-C <cpu> | 仅监控某 CPU 核 | -C 0,2 |
-g | 启用调用栈 | 展开后可看热点函数的调用链 |
-k | 仅内核符号 | 看内核中什么最忙 |
-u | 仅用户态符号 | — |
-d <sec> | 刷新间隔(秒) | -d 1 |
-F <Hz> | 采样频率 | -F 99 |
-s | 排序字段 | -s dso,sym |
四、perf top vs perf stat vs perf record

| perf top | perf stat | perf record | |
|---|---|---|---|
| 模式 | 实时刷新 | 一次性 | 离线采集 |
| 粒度 | 函数级 | 整体统计 | 函数+调用栈 |
| 适用 | 观察正在运行的程序 | 快速诊断整体面 | 深入分析,出火焰图 |
| 交互 | TUI 实时操作 | 命令行输出 | 先采集,再分析 |
| 数据量 | 无落盘 | 无落盘 | 有 perf.data 落盘 |
实际排查顺序:先
perf stat宏观判断 → 再perf top实时观察 → 最后perf record采样深入。
五、实战场景
场景 1:线上程序突然 CPU 100%,快速定位函数
bash
perf top -p <pid>几秒内就能看到哪个函数在拼命消耗 CPU。
场景 2:确认优化是否生效
运行时开着 perf top -p <pid>,观察热点函数列表。如果优化后原本 40% 的函数降到 5%,说明见效了。
场景 3:看缓存未命中热点(实时)
bash
perf top -e cache-misses如果某个函数占了 80% 的 cache-misses,说明它的内存访问模式有问题。
场景 4:区分内核态 vs 用户态
bash
# 看内核在忙什么
perf top -k
# 看用户态在忙什么
perf top -e cycles:u六、注意事项
- 采样开销:
perf top自身有一定 CPU 开销(通常 < 3%)。对延迟极敏感的程序,用perf record+perf report代替。 - 符号解析:编译时需
-g保留符号。strip过的 binary 只能看到地址。 - 权限:部分事件需 root。
七、与相关文档的交叉引用
| 下一步 | 文档 |
|---|---|
| 离线性分析 | perf-record.md |
| 汇编级深入 | perf-annotate.md |
| 整体统计 | perf-stat.md |
| 事件选择参考 | perf-events.md |
八、一句话总结
perf top是系统的"实时心电图"——每秒刷新函数级 CPU 热点,不用等采样完就能看到"现在谁在消耗 CPU",是线上应急排障的第一步利器。