Habilitando a captura de dados de heap
A análise de heap de processo é mais eficaz quando pilhas são coletadas capturando eventos HeapAlloc e HeapRealloc . Para decodificar pilhas com símbolos, você deve habilitar a decodificação de símbolos. Você pode capturar dados de heap quando um processo é iniciado ou em um processo existente.
Para habilitar a captura de dados quando um processo é iniciado
Este exemplo inicia o processo que está sendo analisado a partir da sequência de linha de comando que inicia a captura de dados. Habilitar a captura de dados quando um processo é iniciado garante que não haja perda de informações de alocação ou histórico. Execute as seguintes etapas para habilitar a captura de dados na inicialização do processo:
Em um prompt de comandos com privilégios elevados, digite o seguinte comando:
xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16
Veja a seguir um comando de exemplo:
xperf -start HeapSession -heap -PidNewProcess "C:\Program Files\Windows Sidebar\sidebar.exe" -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
A barra lateral é aberta na área de trabalho.
A tabela a seguir descreve esses comandos.
Comando Descrição -start HeapSession
Inicializa uma sessão de rastreamento ou sessão de agente. Nesse caso, a sessão é chamada de "HeapSession".
-Heap
Identifica "HeapSession" como um rastreamento de heap.
-PidNewProcess
Inicializa um processo. Nesse caso, inicializa a Barra Lateral do Windows.
-Buffersize
Define o tamanho do buffer no qual os dados do evento são armazenados. Um tamanho ideal para um buffer é de 1024 KB. O padrão é 64 KB.
-MinBuffers
Define o número mínimo de buffers para o armazenamento de dados de eventos. MinBuffers deve ser igual a MaxBuffers para garantir a consistência entre rastreamentos.
-MaxBuffers
Aloque MaxBuffers de forma conservadora, pois os buffers são alocados de memória não paginada, que é um recurso finito do sistema.
-stackwalk
Inicializa o recurso stackwalk para coletar informações de alocação e desalocação e associar essas informações a threads específicos.
HeapAlloc+HeapRealloc
Identifica eventos de heap específicos a serem capturados e apresentados pela instalação stackwalk.
Digite o seguinte comando:
xperf -stop -stop HeapSession -d HeapTrace.etl
O
-d HeapTrace.etl
comando mescla rastreamentos produzidos na sessão no arquivo HeapTrace.etl.
Para habilitar a captura de dados em um processo existente
Essa opção habilita a captura de dados sem parar e reiniciar o processo. Isso pode ser vantajoso quando o cenário que está sendo analisado não ocorrer até que o aplicativo seja iniciado e a alocação inicial de heap (que pode gerar arquivos de rastreamento extremamente grandes) não seja necessária.
Execute as seguintes etapas:
Em um prompt de comandos com privilégios elevados, inicie o Agente do Kernel NT com o sinalizador BASE da seguinte maneira:
xperf -on BASE
Para habilitar o rastreamento de heap em um processo existente, substitua a ID do processo real por XXX no seguinte comando:
xperf -start HeapSession -heap -Pid XXX -BufferSize 1024 -MinBuffers 128 -MaxBuffers 128 -stackwalk HeapAlloc+HeapRealloc
Prepare os rastreamentos para análise da mesma maneira que é feito para a captura de dados quando um processo é iniciado:
xperf -stop -stop HeapSession -d heapTrace.etl