Включение отслеживания данных кучи

Анализ кучи процессов наиболее эффективен при сборе стеков с событиями HeapAlloc и HeapRealloc . Чтобы декодировать стеки с помощью символов, необходимо включить декодирование символов. Данные кучи можно собирать при запуске процесса или в существующем процессе.

Включение отслеживания данных при запуске процесса

Этот пример запускает анализируемый процесс из последовательности командной строки, которая запускает сбор данных. Включение записи данных при запуске процесса гарантирует отсутствие потери сведений о выделении или журнала. Чтобы включить сбор данных при запуске процесса, сделайте следующее:

  1. В командной строке с повышенными привилегиями введите следующую команду: xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16

  2. Ниже приведен пример команды: xperf -start HeapSession -heap -PidNewProcess "C:\Program Files\Windows Sidebar\sidebar.exe" -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc

    На рабочем столе откроется боковая панель.

    В следующей таблице описаны эти команды.

    Get-Help Описание

    -start HeapSession

    Инициализирует сеанс трассировки или сеанс средства ведения журнала. В этом случае сеанс называется "HeapSession".

    -Кучи

    Определяет "HeapSession" как трассировку кучи.

    -PidNewProcess

    Инициализирует процесс. В этом случае инициализирует боковую панель Windows.

    -BufferSize

    Задает размер буфера, в котором хранятся данные события. Оптимальный размер буфера составляет 1024 КБ. По умолчанию имеет значение 64 КБ.

    -MinBuffers

    Задает минимальное количество буферов для хранения данных событий. MinBuffers должны быть равны MaxBuffers , чтобы гарантировать согласованность между трассировками.

    -MaxBuffers

    Выделение MaxBuffers консервативным образом, так как буферы выделяются из нестраничной памяти, которая является конечным системным ресурсом.

    -stackwalk

    Инициализирует средство stackwalk для сбора сведений о выделении и освобождении и связывания этой информации с конкретными потоками.

    HeapAlloc+HeapRealloc

    Определяет конкретные события кучи, которые будут записаны и представлены объектом stackwalk.

  3. Введите следующую команду: xperf -stop -stop HeapSession -d HeapTrace.etl

    Команда -d HeapTrace.etl объединяет трассировки, созданные в сеансе, в файл HeapTrace.etl.

Включение отслеживания данных в существующем процессе

Этот параметр включает сбор данных без остановки и перезапуска процесса. Это может оказаться полезным, если анализируемый сценарий не выполняется до тех пор, пока приложение не запустится, а выделение начальной кучи (которое может создавать очень большие файлы трассировки) не требуется.

Сделайте следующее:

  1. В командной строке с повышенными привилегиями запустите средство ведения журнала ядра NT с флагом BASE следующим образом: xperf -on BASE

  2. Чтобы включить трассировку кучи для существующего процесса, замените фактический идентификатор процесса xxx в следующей команде: xperf -start HeapSession -heap -Pid XXX -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc

  3. Подготовьте трассировки для анализа так же, как и для записи данных при запуске процесса: xperf -stop -stop HeapSession -d heapTrace.etl

Кучи