首页/系统/Linux 内核与性能调优速查/perf script 导出与管道处理

perf script 导出与管道处理

把采样数据导出为可读事件流, 供自定义统计或生成火焰图输入格式。

导出事件流

采样数据本身是二进制格式,导出命令把它转成按行组织的可读事件流:每行描述一次样本,包含进程、时间、事件类型与符号等字段。它扮演的是桥梁角色,把采集结果接进自有的脚本、统计逻辑或火焰图工具链。字段可以按需挑选,减少无关输出。

基本信息

适用平台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   # 按进程统计样本数

常用字段

字段含义用途
进程名与进程号样本所属进程按服务归集样本
线程号样本所属线程定位具体工作线程
时间样本产生时刻与日志或监控对齐
事件名触发采样的事件区分不同采样来源
符号当前执行位置统计热点函数
导出体积可能很大,先抽样看格式、估算行数再全量处理,避免脚本跑一半发现磁盘或内存不够。
导出结果反映的是采样频率下的抽样,不能当成精确的事件序列去计算调用次数;需要精确次数时改用计数方式或追踪点统计。

易错点

  • 字段名写错导致输出为空,先用默认格式确认字段清单再写参数。
  • 把导出结果当精确事件流,据此计算调用次数得出错误结论。
  • 先全量导出再看格式,处理大文件时浪费时间与磁盘。
  • 忽略采集时的频率设置:不同频率导出的数据密度不同,跨文件比较会失真。
  • 导出文件不清理,反复采集后占满临时目录。

数据来源与参考

  • man perf-script
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌