perf script
是 Linux 性能分析工具 perf
的一个子命令,主要用于将 perf record
采集的性能数据(通常保存在 perf.data
文件中)转换为可读的文本格式或脚本可处理的流式数据。以下是它的核心功能详解:
1. 核心功能
(1) 原始事件数据转文本
- 作用:将二进制格式的
perf.data
转换为人类可读的文本输出。 - 示例:
输出样例:perf script
mysqld 1234 [001] 456789.012345: cpu-clock: 7f8b2d3cf0 _start+0x0 (/lib/x86_64-linux-gnu/ld-2.31.so)
(2) 支持多种输出格式
- 默认格式:时间戳、进程名、PID、CPU、事件类型、调用栈等。
- 自定义字段:通过
-F
指定输出的字段(如pid,tid,time,event,sym
)。perf script -F pid,time,event,sym
(3) 脚本化处理
- 与外部工具集成:输出可通过管道传递给其他工具(如
grep
/awk
/Python)进行自动化分析。 - 示例:统计最频繁的函数调用
perf script | awk '{print $NF}' | sort | uniq -c | sort -nr | head -10
2. 高级用法
(1) 生成火焰图输入数据
perf script > out.perf # 生成中间文件
stackcollapse-perf.pl out.perf > out.folded
flamegraph.pl out.folded > out.svg
(2) 过滤特定事件或进程
perf script --pid <PID> # 仅显示指定进程的数据
perf script --event cpu-clock # 仅显示特定事件
(3) DWARF调试信息支持
若编译时添加了 -g
,可显示更详细的符号和源码位置:
perf script --call-trace # 显示完整调用链和行号(需调试符号)
3. Perf Script vs Other Perf Commands
Command | Purpose |
---|---|
perf record |
采集性能数据到 perf.data |
perf report |
交互式查看分析结果(类似top-down) |
perf annotate |
反汇编代码并关联热点 |
perf script |
原始数据导出,适合脚本化/定制化分析 |
4. FAQ常见问题
Q:
addr2line
无法解析地址?
A:- 确认二进制文件未剥离符号表(编译时加
-g
,运行时未执行strip)。
- `.text段地址偏移计算正确。
- 确认二进制文件未剥离符号表(编译时加
Q:如何捕获完整调用栈?
# x86需启用帧指针或DWARF回溯
perf record --call-graph dwarf/fp ...
通过灵活使用这些功能,你可以实现从基础性能诊断到复杂自动化分析的各类任务。
内容由零声教学AI助手提供,问题来源于学员提问