perf stat 间隔输出

用 -I 让计数按固定毫秒间隔输出, 把性能波动与时间线上的事件对齐。

间隔输出

默认情况下 perf stat 只在整个窗口结束时给出一行汇总。加上间隔参数后,计数会按固定毫秒数分段输出,形成一个时间序列。这样就能把性能波动与时间线上的事件对齐:发布开始、压测加压、定时任务触发、告警产生,都能在序列里找到对应的突变点。

基本信息

适用平台Linux(内核自带性能工具)
间隔单位毫秒
输出形态每个间隔一行,含时刻与本段计数
配套选项输出到文件后配合脚本处理
权衡间隔越短开销越高,输出量也越大

典型使用场景

  • 观察发布或配置重载瞬间计数是否出现突变。
  • 定位周期性任务造成的规律抖动,比如定时批处理与垃圾回收。
  • 把采集结果与监控指标时间线对齐,验证告警与资源消耗是否同源。
  • 采样结果落盘留档,作为优化前后的对照依据。
  • 确认抖动是持续存在还是仅出现在某个时间段。

间隔采样

间隔采样
perf stat -I 1000 -e cycles,instructions,cache-misses -p 12345   # 每秒一行,Ctrl-C 结束
perf stat -I 1000 -e cycles,instructions -a -- sleep 60           # 整机口径,限定 60 秒
perf stat -I 1000 -e context-switches -p 12345 -o /tmp/stat.log   # 落盘后再用脚本分析
awk 'NR>2 && $1 > 0 {print}' /tmp/stat.log | head                # 先看格式再决定统计方式

间隔输出解读

列含义排查用法
时间戳本间隔结束时刻与发布、压测时间线对齐
计数本间隔内的事件次数与上一间隔比较找突变
变化幅度间隔之间抖动大小判断干扰或负载变化
缩放标记事件复用时的估算提示出现时应减少事件数复核
间隔输出天然会放大瞬时噪声:判断趋势要看连续多段的变化,而不是抓住某个尖峰就下结论。
间隔设得过小会让采集本身成为干扰源,尤其在高频事件上;同时长时间运行的输出文件会快速膨胀,落盘前先估算行数与磁盘占用。

易错点

  • 间隔过小带来额外开销,改变了被观测对象的行为,数据失真。
  • 长时间运行未估算输出量,文件写满磁盘或刷屏导致排查中断。
  • 只看某一行的尖峰,不与相邻时段比较,把噪声当成故障信号。
  • 时间线没有对齐:采集工具与业务系统的时钟不同步,对应关系错位。
  • 出现缩放标记仍按精确值解读,据此计算出的比例不可靠。

数据来源与参考

  • man perf-stat
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌