Compartilhar via


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:

  1. Em um prompt de comandos com privilégios elevados, digite o seguinte comando: xperf -on Base -BufferSize 1024 -MinBuffers 10 -MaxBuffers 16

  2. 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.

  3. 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:

  1. 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

  2. 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

  3. 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

Heap