导出事件流
采样数据本身是二进制格式,导出命令把它转成按行组织的可读事件流:每行描述一次样本,包含进程、时间、事件类型与符号等字段。它扮演的是桥梁角色,把采集结果接进自有的脚本、统计逻辑或火焰图工具链。字段可以按需挑选,减少无关输出。
基本信息
| 适用平台 | Linux(内核自带性能工具) |
|---|---|
| 常用选项 | 选择输出字段,便于后续脚本处理 |
| 输出形态 | 文本事件流,一行一个样本 |
| 常见下游 | 折叠栈生成工具与火焰图脚本 |
| 本质 | 采样结果,不是完整精确的事件记录 |
典型使用场景
- 把采样结果转成折叠格式,喂给火焰图脚本。
- 按进程名或事件类型过滤后做自定义统计。
- 大文件先抽样观察格式,再决定全量处理方式。
- 与业务日志按时间对齐,判断热点出现在哪个阶段。
- 导出后交给同事复现,避免直接传二进制采样文件。
导出与处理
导出与处理
perf script > /tmp/perf.txt # 全量导出
perf script -F comm,pid,tid,time,event,ip,sym | head -20 # 只保留需要的字段
perf script -F comm,pid,time --header | head -5 # 带表头的字段输出
perf script > /tmp/out.perf && wc -l /tmp/out.perf # 先看行数,估算后续处理成本
awk '{print $1}' /tmp/perf.txt | sort | uniq -c | sort -rn | head # 按进程统计样本数常用字段
| 字段 | 含义 | 用途 |
|---|---|---|
| 进程名与进程号 | 样本所属进程 | 按服务归集样本 |
| 线程号 | 样本所属线程 | 定位具体工作线程 |
| 时间 | 样本产生时刻 | 与日志或监控对齐 |
| 事件名 | 触发采样的事件 | 区分不同采样来源 |
| 符号 | 当前执行位置 | 统计热点函数 |
导出体积可能很大,先抽样看格式、估算行数再全量处理,避免脚本跑一半发现磁盘或内存不够。
导出结果反映的是采样频率下的抽样,不能当成精确的事件序列去计算调用次数;需要精确次数时改用计数方式或追踪点统计。