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 个信息(非常关键)
- 问题动作:你要做什么操作;
- 问题时间:大概在第几秒出现卡顿;
- 影响对象:哪个进程/功能受影响;
- 成功标准:比如“目标耗时从 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 Level 选 Verbose(若担心开销先用 Light,复现困难再升 Verbose)。
1.3 录制时长控制
按钮路径:
- 点击 Start;
- 立即执行问题动作(不要先挂很久);
- 复现后再多录 5~10 秒;
- 点击 Save,保存为
*.etl。
建议文件命名:
normal_export_01.etl(正常样本)slow_export_01.etl(异常样本)
一次录制只覆盖一个问题动作,避免“一个 ETL 里塞太多剧情”。
2. WPA 打开后第一件事:先做时间对齐
2.1 打开 ETL
- 启动
Windows Performance Analyzer; File→Open→ 选择*.etl。
2.2 固定问题时间窗
操作路径(通用):
- 在图表上拖拽选中问题区间;
- 右键选择 Zoom to Selection(或工具栏缩放);
- 后续所有表格都在该时间窗观察。
这是最容易被忽略、但最提效的一步。没有时间窗,后面全是噪音。
3. 视图 1:先看系统总览(判断主瓶颈方向)
左侧 Graph Explorer 中按顺序打开:
- System Activity →
CPU Usage (Sampled) - Memory →
Commit、Working Set、Hard Faults - Storage →
Disk Usage/Disk I/O - (可选)
Generic Events(看关键标记事件)
3.1 操作要点
- 把图表和表格联动放在同一时间窗;
- 先判断是 CPU、内存分页、还是 I/O 排队主导;
- 不要立刻跳调用栈。
4. 视图 2:CPU 高的实操路径(点哪里、怎么看)
4.1 打开 CPU 详细表
路径:System Activity → CPU Usage (Sampled)(Table)。
4.2 过滤到目标进程
常见操作:
- 在表头找到
Process列; - 右键目标进程名 →
Filter To Selection; - 再按
Thread ID展开线程贡献; - 按
Weight/% Weight降序看热点。
4.3 下钻到调用栈
- 展开
Stack(或切换带 Stack 的视图配置); - 关注自家模块(函数名/模块名)出现频次;
- 判断是“计算热点”还是“忙等/轮询”。
4.4 常用辅助视图
CPU Usage (Precise):看更精细的调度行为;Context Switches:判断线程频繁切换是否吞掉吞吐。
5. 视图 3:内存高的实操路径
5.1 先看系统压力
路径:Memory → Commit、Hard Faults。
观察规则:
- Commit 接近上限 + Hard Faults 同时高:优先看分页压力;
- 仅 Working Set 高但系统稳定:可能是缓存,不一定泄漏。
5.2 过滤到目标进程
在内存相关表格中:
- 以
Process过滤; - 观察
Private WS/Commit Size随时间变化; - 对比问题动作前后是否“涨而不回”。
5.3 与卡顿时间对齐
- 把内存尖峰与用户卡顿时间点重叠看;
- 若卡顿时伴随 Hard Faults 峰值,说明慢点可能在磁盘分页而非纯 CPU。
6. 视图 4:进程耗时长(慢请求/卡顿)实操路径
6.1 找到关键线程的状态占比
可结合:CPU Usage、Thread Activity、Wait Analysis(版本差异下名称可能不同)。
目标是回答:
- 这段慢时间里,线程是 Running 为主还是 Waiting 为主?
- Waiting 的主因是什么:锁、文件、网络、事件?
6.2 若是 Waiting 主导,继续下钻
- I/O 等待:去
Disk I/O/File I/O找高延迟请求; - 锁等待:看同步对象相关事件(Mutex/Critical Section 等);
- 网络等待:补录网络相关 profile 做二次定位。
7. 常用过滤技巧(WPA 提效关键)
7.1 先时间过滤,再对象过滤
推荐顺序:
- 先 Zoom 到问题时间窗;
- 再 Filter 到进程;
- 再下钻线程;
- 最后看栈。
7.2 只保留“有贡献”的列
- 移除不相关列;
- 固定关键列:
Process、Thread ID、Weight、Stack; - 按贡献度降序后再展开树。
7.3 版本对比法
- 打开两份 ETL(正常/异常)并排看同一指标;
- 聚焦“异常样本里新增的热点路径”。
8. 报告导出:如何产出一份可复盘结论
8.1 导出图表/表格
常见路径:
- 在目标视图右键导出(导出图片/数据,具体菜单随版本可能不同);
- 或使用
File菜单导出当前分析结果。
8.2 建议报告结构(可直接复制)
- 问题定义:动作 + 影响 + 复现率;
- 录制信息:机器、版本、ETL 文件名、时间窗;
- 主瓶颈判定:CPU/内存/I/O/锁;
- 证据链:
- 指标截图(时间窗一致)
- Top 进程/线程
- 热点调用栈(3 层以上)
- 优化动作:改了什么;
- 前后对比:耗时、CPU 峰值、Hard Faults、I/O 延迟;
- 结论:收益与风险。
9. 一套“10 分钟快查”清单(现场救火版)
- 开 ETL,先框时间窗(1 分钟);
- 看 CPU/内存/磁盘总览,判主方向(2 分钟);
- 过滤到目标进程,找 Top 线程(2 分钟);
- 看线程 Running vs Waiting(2 分钟);
- 有必要再下钻栈,提 1~2 个根因假设(2 分钟);
- 写出下一步验证动作(1 分钟)。
10. 常见踩坑与规避
- 踩坑 1:录太久 → ETL 过大难分析。建议短录制、精准动作。
- 踩坑 2:不做对照组 → 很难判断“异常是否真的异常”。
- 踩坑 3:直接看栈 → 容易被噪音栈带偏。
- 踩坑 4:只给截图不给结论 → 复盘无法落地。
11. 结语
把 WPR/WPA 用好,不是“会点菜单”而已,而是形成一条稳定流程:
先时间窗,后瓶颈类型;先进程线程,后调用栈;先证据链,后优化结论。
如果你愿意,下一篇可以继续做“案例版”:给一份真实慢请求 ETL,按这份清单完整走一遍并写出最终优化单。
本文由作者按照 CC BY 4.0 进行授权