记录堆快照
Windows 性能记录器 (WPR) 为系统上的特定进程启用堆快照。
此堆快照不同于堆分析记录,因为它会获取堆的快照视图。 例如,堆快照将所有堆分配信息保存在数据库中。 执行 SingleSnapshot 命令时,它将分配信息导出到跟踪缓冲区。 快照提供分配信息,其中包括启用快照后创建的所有堆栈。
捕获堆快照跟踪
- 启用堆快照跟踪 有两种方法可以按进程名称和进程 ID 启用堆快照跟踪。
以下示例使用进程名称:
wpr -snapshotconfig heap -name heaptest.exe //query snapshot config
wpr -snapshotconfig heap -name heaptest.exe enable //enable snapshot config
以下示例使用进程 ID 或 PID:
wpr -snapshotconfig heap -pid 8048 enable //enable snapshot config
- 使用 wpr 或 wprui 开始跟踪
使用 wpr:
wpr -start heapsnapshot -filemode
如果 -name 选项用于启用堆快照,则需要在启用配置后启动进程。
- 拍摄堆快照
每次触发快照时,分配堆栈数据库都会导出到跟踪缓冲区。 单个快照(可多次使用),例如:
wpr -singlesnapshot heap <pid for foo.exe>
定期快照:
wpr -enableperiodicsnapshot heap <frequency in seconds> <pid for foo.exe>
- 使用 wprui 或 wpr 保存跟踪。
wpr -stop heapsnapshot.etl
- 禁用堆快照
可以使用 PID 或名称禁用堆。 以下是这两者的示例。
使用名称:
wpr -snapshotconfig heap -name Win32Project1.exe disable
使用 PID:
wpr -snapshotconfig heap -pid %_PID% disable
注意:如果使用 -name 选项启用堆快照,它将在内部设置 IFEO 注册表,并应用于该进程的所有新实例。 测试完成后,使用 SnapshotConfig 选项将其禁用,以避免不必要的堆收集。 此外,如果进程和操作系统的 cpu 架构不匹配(例如,在 64 位操作系统上运行 win32 应用),请使用名称选项 (IFEO)。