文章

WPR + WPA 实操清单版:按按钮路径一步步定位性能瓶颈

面向实战的 WPR/WPA 操作手册,包含录制配置、WPA 视图打开与过滤、CPU/内存/IO/卡顿分析路径,以及报告导出模板

WPR + WPA 实操清单版:按按钮路径一步步定位性能瓶颈

上一篇我们讲了“该先看哪些指标”。这篇给你一份可以直接照着点的操作清单:

  • WPR 怎么选 Profile、怎么开始/结束录制;
  • WPA 里每个关键视图在哪里打开;
  • 如何按进程、线程、时间窗过滤;
  • 如何导出“可复盘”的分析报告。

如果你是第一次上手,建议边看边做一遍“慢操作复现”,10~20 分钟就能跑完整个闭环。


0. 使用前准备(5 分钟)

0.1 环境准备

  • 安装 Windows Performance Toolkit(包含 WPR/WPA);
  • 确认问题可复现(例如“点击导出按钮后卡 8 秒”);
  • 尽量关闭无关大型任务(避免背景噪音干扰)。

0.2 录制前写下 4 个信息(非常关键)

  1. 问题动作:你要做什么操作;
  2. 问题时间:大概在第几秒出现卡顿;
  3. 影响对象:哪个进程/功能受影响;
  4. 成功标准:比如“目标耗时从 8s 降到 3s 内”。

1. WPR 录制:按钮路径与推荐配置

以下路径基于图形界面 WPR(wprui.exe)。

1.1 打开 WPR

  • 开始菜单搜索:Windows Performance Recorder
  • 选择 More options(显示完整配置)。

1.2 第一次排查的推荐勾选

在 Profile 中优先勾选(名称可能因系统版本略有差异):

  • CPU Usage
  • Disk I/O Activity
  • File I/O
  • Memory

Detail LevelVerbose(若担心开销先用 Light,复现困难再升 Verbose)。

1.3 录制时长控制

按钮路径:

  1. 点击 Start
  2. 立即执行问题动作(不要先挂很久);
  3. 复现后再多录 5~10 秒;
  4. 点击 Save,保存为 *.etl

建议文件命名:

  • normal_export_01.etl(正常样本)
  • slow_export_01.etl(异常样本)

一次录制只覆盖一个问题动作,避免“一个 ETL 里塞太多剧情”。


2. WPA 打开后第一件事:先做时间对齐

2.1 打开 ETL

  • 启动 Windows Performance Analyzer
  • FileOpen → 选择 *.etl

2.2 固定问题时间窗

操作路径(通用):

  1. 在图表上拖拽选中问题区间;
  2. 右键选择 Zoom to Selection(或工具栏缩放);
  3. 后续所有表格都在该时间窗观察。

这是最容易被忽略、但最提效的一步。没有时间窗,后面全是噪音。


3. 视图 1:先看系统总览(判断主瓶颈方向)

左侧 Graph Explorer 中按顺序打开:

  1. System ActivityCPU Usage (Sampled)
  2. MemoryCommitWorking SetHard Faults
  3. StorageDisk Usage / Disk I/O
  4. (可选)Generic Events(看关键标记事件)

3.1 操作要点

  • 把图表和表格联动放在同一时间窗;
  • 先判断是 CPU、内存分页、还是 I/O 排队主导;
  • 不要立刻跳调用栈。

4. 视图 2:CPU 高的实操路径(点哪里、怎么看)

4.1 打开 CPU 详细表

路径:System ActivityCPU Usage (Sampled)(Table)。

4.2 过滤到目标进程

常见操作:

  1. 在表头找到 Process 列;
  2. 右键目标进程名 → Filter To Selection
  3. 再按 Thread ID 展开线程贡献;
  4. Weight/% Weight 降序看热点。

4.3 下钻到调用栈

  • 展开 Stack(或切换带 Stack 的视图配置);
  • 关注自家模块(函数名/模块名)出现频次;
  • 判断是“计算热点”还是“忙等/轮询”。

4.4 常用辅助视图

  • CPU Usage (Precise):看更精细的调度行为;
  • Context Switches:判断线程频繁切换是否吞掉吞吐。

5. 视图 3:内存高的实操路径

5.1 先看系统压力

路径:MemoryCommitHard Faults

观察规则:

  • Commit 接近上限 + Hard Faults 同时高:优先看分页压力;
  • 仅 Working Set 高但系统稳定:可能是缓存,不一定泄漏。

5.2 过滤到目标进程

在内存相关表格中:

  1. Process 过滤;
  2. 观察 Private WS / Commit Size 随时间变化;
  3. 对比问题动作前后是否“涨而不回”。

5.3 与卡顿时间对齐

  • 把内存尖峰与用户卡顿时间点重叠看;
  • 若卡顿时伴随 Hard Faults 峰值,说明慢点可能在磁盘分页而非纯 CPU。

6. 视图 4:进程耗时长(慢请求/卡顿)实操路径

6.1 找到关键线程的状态占比

可结合:CPU UsageThread ActivityWait Analysis(版本差异下名称可能不同)。

目标是回答:

  • 这段慢时间里,线程是 Running 为主还是 Waiting 为主?
  • Waiting 的主因是什么:锁、文件、网络、事件?

6.2 若是 Waiting 主导,继续下钻

  • I/O 等待:去 Disk I/O / File I/O 找高延迟请求;
  • 锁等待:看同步对象相关事件(Mutex/Critical Section 等);
  • 网络等待:补录网络相关 profile 做二次定位。

7. 常用过滤技巧(WPA 提效关键)

7.1 先时间过滤,再对象过滤

推荐顺序:

  1. 先 Zoom 到问题时间窗;
  2. 再 Filter 到进程;
  3. 再下钻线程;
  4. 最后看栈。

7.2 只保留“有贡献”的列

  • 移除不相关列;
  • 固定关键列:ProcessThread IDWeightStack
  • 按贡献度降序后再展开树。

7.3 版本对比法

  • 打开两份 ETL(正常/异常)并排看同一指标;
  • 聚焦“异常样本里新增的热点路径”。

8. 报告导出:如何产出一份可复盘结论

8.1 导出图表/表格

常见路径:

  • 在目标视图右键导出(导出图片/数据,具体菜单随版本可能不同);
  • 或使用 File 菜单导出当前分析结果。

8.2 建议报告结构(可直接复制)

  1. 问题定义:动作 + 影响 + 复现率;
  2. 录制信息:机器、版本、ETL 文件名、时间窗;
  3. 主瓶颈判定:CPU/内存/I/O/锁;
  4. 证据链
    • 指标截图(时间窗一致)
    • Top 进程/线程
    • 热点调用栈(3 层以上)
  5. 优化动作:改了什么;
  6. 前后对比:耗时、CPU 峰值、Hard Faults、I/O 延迟;
  7. 结论:收益与风险。

9. 一套“10 分钟快查”清单(现场救火版)

  1. 开 ETL,先框时间窗(1 分钟);
  2. 看 CPU/内存/磁盘总览,判主方向(2 分钟);
  3. 过滤到目标进程,找 Top 线程(2 分钟);
  4. 看线程 Running vs Waiting(2 分钟);
  5. 有必要再下钻栈,提 1~2 个根因假设(2 分钟);
  6. 写出下一步验证动作(1 分钟)。

10. 常见踩坑与规避

  • 踩坑 1:录太久 → ETL 过大难分析。建议短录制、精准动作。
  • 踩坑 2:不做对照组 → 很难判断“异常是否真的异常”。
  • 踩坑 3:直接看栈 → 容易被噪音栈带偏。
  • 踩坑 4:只给截图不给结论 → 复盘无法落地。

11. 结语

把 WPR/WPA 用好,不是“会点菜单”而已,而是形成一条稳定流程:

先时间窗,后瓶颈类型;先进程线程,后调用栈;先证据链,后优化结论。

如果你愿意,下一篇可以继续做“案例版”:给一份真实慢请求 ETL,按这份清单完整走一遍并写出最终优化单。

本文由作者按照 CC BY 4.0 进行授权