首页/系统/Linux 内核与性能调优速查/perf report 排序与过滤

perf report 排序与过滤

通过排序维度与过滤条件把报告聚焦到可行动的信息: 按进程、库或符号聚合。

排序与过滤

采样数据本身只是样本集合,只有选择合适的聚合维度才能变成可行动的信息。按进程或共享对象聚合能先定层面:问题在业务代码还是在某个依赖库;再按符号下钻到具体函数。配合百分比门槛过滤长尾,报告会从几百行收敛到十几行,主要矛盾随之浮出来。

基本信息

适用平台Linux(内核自带性能工具)
排序维度进程、线程、共享对象、符号
过滤方式按占比门槛排除长尾条目
前提条件目标有符号信息,否则聚合维度只剩地址
输出形式文本表格或交互界面

典型使用场景

  • 报告条目太多看不出结构,需要先按层面聚合。
  • 区分热点来自业务代码还是依赖库,决定优化归属。
  • 多进程混合部署时只看其中一个进程的占比。
  • 过滤长尾条目,让评审材料聚焦主要热点。
  • 多线程服务按线程聚合,定位消耗集中的线程。

常用组合

常用组合
perf report --stdio --sort comm,dso | head -30        # 先看进程与共享对象
perf report --stdio --sort symbol --percent-limit 1 | head -30   # 过滤长尾,聚焦热点
perf report --stdio --sort pid,sym | head -30         # 带进程号,多个同名进程可区分
perf report --stdio --sort dso | head -20             # 看各库总占比
perf report --stdio --sort symbol -g | head -40        # 展开调用关系
perf report --stdio --sort symbol --percent-limit 0.5 | head -40  # 门槛放宽一点再看一轮

排序维度与用途

维度看到什么什么时候用
共享对象各库与可执行文件的占比先判断责任归属
进程与线程哪个进程或线程消耗多混合部署与多线程服务
符号具体函数占比锁定优化目标
调用关系热点的上层调用路径判断是否由公共路径引入
过滤门槛先宽后紧:一上手就用很高的门槛会把中等占比但结构重要的路径一并滤掉,看不到真实形状。
长时间只盯着排名第一的符号容易漏掉真实结构:多个中等占比符号指向同一条调用路径时,问题往往是整条路径而不是单个函数。

易错点

  • 排序维度选错,报告看不出结构,只能凭感觉挑一个函数去优化。
  • 长尾条目被过滤后误判热点集中度,漏掉结构性问题的线索。
  • 不做层面聚合就直接看符号,把依赖库的开销误当成业务代码问题。
  • 多进程环境下不按进程号聚合,同名进程的样本混在一起。
  • 忽略调用关系展开,看不到热点由哪条上层路径引入。

数据来源与参考

  • man perf-report
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌