记录堆快照

Windows 性能记录器 (WPR) 为系统上的特定进程启用堆快照。

此堆快照不同于堆分析记录,因为它会获取堆的快照视图。 例如,堆快照将所有堆分配信息保存在数据库中。 执行 SingleSnapshot 命令时,它将分配信息导出到跟踪缓冲区。 快照提供分配信息,其中包括启用快照后创建的所有堆栈。

捕获堆快照跟踪

  1. 启用堆快照跟踪 有两种方法可以按进程名称和进程 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
  1. 使用 wpr 或 wprui 开始跟踪

使用 wpr:

wpr -start heapsnapshot -filemode                          

如果 -name 选项用于启用堆快照,则需要在启用配置后启动进程。

  1. 拍摄堆快照

每次触发快照时,分配堆栈数据库都会导出到跟踪缓冲区。 单个快照(可多次使用),例如:

 wpr -singlesnapshot heap <pid for foo.exe>

定期快照:

 wpr -enableperiodicsnapshot heap <frequency in seconds> <pid for foo.exe>
  1. 使用 wprui 或 wpr 保存跟踪。
wpr -stop heapsnapshot.etl
  1. 禁用堆快照
    可以使用 PID 或名称禁用堆。 以下是这两者的示例。

使用名称:

wpr -snapshotconfig heap -name Win32Project1.exe disable

使用 PID:

 wpr -snapshotconfig heap -pid %_PID% disable

注意:如果使用 -name 选项启用堆快照,它将在内部设置 IFEO 注册表,并应用于该进程的所有新实例。 测试完成后,使用 SnapshotConfig 选项将其禁用,以避免不必要的堆收集。 此外,如果进程和操作系统的 cpu 架构不匹配(例如,在 64 位操作系统上运行 win32 应用),请使用名称选项 (IFEO)。