Поделиться через


Запись моментального снимка кучи

Windows Performance Recorder (WPR) позволяет snapshot кучи для определенных процессов в системе.

Эта snapshot кучи отличается от записи анализа кучи, так как она принимает snapshot представление кучи. Например, моментальный снимок кучи сохраняет всю информацию о выделении кучи в базе данных. При выполнении команды SingleSnapshot она экспортирует сведения о выделении в буфер трассировки. Snapshot содержит сведения о выделении, включая все стеки, созданные после включения snapshot.

Запись кучи snapshot трассировки

  1. Включение кучи snapshot трассировки. Существует два способа включения кучи snapshot трассировки: по имени процесса и по идентификатору процесса.

В следующем примере используется имя процесса:

 wpr -snapshotconfig heap -name heaptest.exe           //query snapshot config
 wpr -snapshotconfig heap -name heaptest.exe enable    //enable snapshot config

В следующем примере используется идентификатор процесса или PID:

wpr -snapshotconfig heap -pid 8048 enable                //enable snapshot config
  1. Запуск трассировки с помощью wpr или wprui

с помощью wpr :

wpr -start heapsnapshot -filemode                          

Если параметр -name использовался для включения snapshot кучи, необходимо запустить процесс после включения конфигурации.

  1. Возьмите кучу snapshot

При каждом запуске snapshot база данных стека выделения экспортируется в буферы трассировки. Один snapshot (можно использовать несколько раз), например:

 wpr -singlesnapshot heap <pid for foo.exe>

Периодические snapshot:

 wpr -enableperiodicsnapshot heap <frequency in seconds> <pid for foo.exe>
  1. Сохраните трассировку с помощью wprui или wpr.
wpr -stop heapsnapshot.etl
  1. Отключение snapshot кучи
    Вы можете отключить кучу с помощью PID или Name. Ниже приведены примеры обоих примеров.

Использование имени:

wpr -snapshotconfig heap -name Win32Project1.exe disable

Использование PID:

 wpr -snapshotconfig heap -pid %_PID% disable

Примечание: Если параметр -name используется для включения кучи snapshot, он задает реестр IFEO внутри организации и будет применяться ко всем новым экземплярам процесса. Отключите его с помощью параметра SnapshotConfig по завершении тестирования, чтобы избежать ненужного сбора кучи. Кроме того, если архитектура ЦП процесса и ОС не совпадает (например, запуск приложения Win32 в 64-разрядной ОС), используйте параметр name (IFEO).