Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Анализ кучи процессов наиболее эффективен при сборе стеков с событиями HeapAlloc и HeapRealloc . Чтобы декодировать стеки с помощью символов, необходимо включить декодирование символов. Данные кучи можно собирать при запуске процесса или в существующем процессе.
Включение отслеживания данных при запуске процесса
Этот пример запускает анализируемый процесс из последовательности командной строки, которая запускает сбор данных. Включение записи данных при запуске процесса гарантирует отсутствие потери сведений о выделении или журнала. Чтобы включить сбор данных при запуске процесса, сделайте следующее:
В командной строке с повышенными привилегиями введите следующую команду:
xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16Ниже приведен пример команды:
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.
Введите следующую команду:
xperf -stop -stop HeapSession -d HeapTrace.etlКоманда
-d HeapTrace.etlобъединяет трассировки, созданные в сеансе, в файл HeapTrace.etl.
Включение отслеживания данных в существующем процессе
Этот параметр включает сбор данных без остановки и перезапуска процесса. Это может оказаться полезным, если анализируемый сценарий не выполняется до тех пор, пока приложение не запустится, а выделение начальной кучи (которое может создавать очень большие файлы трассировки) не требуется.
Сделайте следующее:
В командной строке с повышенными привилегиями запустите средство ведения журнала ядра NT с флагом BASE следующим образом:
xperf -on BASEЧтобы включить трассировку кучи для существующего процесса, замените фактический идентификатор процесса xxx в следующей команде:
xperf -start HeapSession -heap -Pid XXX -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapReallocПодготовьте трассировки для анализа так же, как и для записи данных при запуске процесса:
xperf -stop -stop HeapSession -d heapTrace.etl