ProcDump v11.0

Por Mark Russinovich e Andrew Richards

Publicado: 03/11/2022

DownloadBaixar o ProcDump(714 KB)

Baixar o ProcDump para Linux (GitHub)

Criado com ZoomIt

Introdução

O ProcDump é um utilitário de linha de comando cuja principal finalidade é monitorar um aplicativo para picos de CPU e gerar despejos de memória durante um pico que um administrador ou desenvolvedor pode usar para determinar a causa do pico. O ProcDump também inclui monitoramento de janela suspensa (usando a mesma definição de janela suspensa que o Windows e o Gerenciador de Tarefas usam), monitoramento de exceções não tratadas e pode gerar despejos com base nos valores dos contadores de desempenho do sistema. Ele também pode servir como um utilitário de despejo de processo geral que você pode inserir em outros scripts.

Usar o ProcDump

Capturar o Uso:

procdump.exe [-mm] [-ma] [-mt] [-mp] [-mc <Mask>] [-md <Callback_DLL>] [-mk]
            [-n <Count>]
            [-s <Seconds>]
            [-c|-cl <CPU_Usage> [-u]]
            [-m|-ml <Commit_Usage>]
            [-p|-pl <Counter> <Threshold>]
            [-h]
            [-e [1] [-g] [-b] [-ld] [-ud] [-ct] [-et]]
            [-l]
            [-t]
            [-f  <Include_Filter>, ...]
            [-fx <Exclude_Filter>, ...]
            [-dc <Comment>]
            [-o]
            [-r [1..5] [-a]]
            [-at <Timeout>]
            [-wer]
            [-64]
            {
                {{[-w] <Process_Name> | <Service_Name> | <PID>} [<Dump_File> | <Dump_Folder>]}
            |
                {-x <Dump_Folder> <Image_File> [Argument, ...]}
            }

Instalar o Uso:

procdump.exe -i [Dump_Folder]
            [-mm] [-ma] [-mt] [-mp] [-mc <Mask>] [-md <Callback_DLL>] [-mk]
            [-r]
            [-at <Timeout>]
            [-k]
            [-wer]

Desinstalar o Uso:

procdump.exe -u

Tipos de Despejo:

Tipo de Despejo Descrição
-mm Grave um arquivo de despejo “Mini”. (padrão)
- Inclui memória referenciada direta e indiretamente (pilhas e o que elas referenciam).
- Inclui todos os metadados (Processo, Thread, Módulo, Identificador, Espaço de Endereço etc.).
-ma Grave um arquivo de despejo “Full”.
- Inclui toda a memória (Imagem, Mapeada e Privada).
- Inclui todos os metadados (Processo, Thread, Módulo, Identificador, Espaço de Endereço etc.).
-mt Grave um arquivo de despejo “Triage”.
- Inclui memória referenciada diretamente (pilhas).
- Inclui metadados limitados (Processo, Thread, Módulo e Identificador).
- A remoção de informações confidenciais é tentada, mas não garantida.
-mp Grave um arquivo de despejo “MiniPlus”.
- Inclui toda a memória privada e toda a imagem de leitura/gravação ou memória mapeada.
- Inclui todos os metadados (Processo, Thread, Módulo, Identificador, Espaço de Endereço etc.).
- Para minimizar o tamanho, a maior área de memória privada com mais de 512 MB é excluída.
  Uma área de memória é definida como a soma de alocações de memória do mesmo tamanho.
  O despejo é tão detalhado quanto um despejo Full, mas 10%-75% do tamanho.
- Observação: os processos CLR são despejados como Full (-ma) devido a limitações de depuração.
-mc Grave um arquivo de despejo “Custom”.
- Inclui a memória e os metadados definidos pela máscara MINIDUMP_TYPE especificada (Hex).
-md Grave um arquivo de despejo “Callback”.
- Inclui a memória definida pelo rotina de retorno de chamada MiniDumpWriteDump denominada MiniDumpCallbackRoutine da DLL especificada.
- Inclui todos os metadados (Processo, Thread, Módulo, Identificador, Espaço de Endereço etc.).
-mk Também grave um arquivo de despejo “Kernel”.
- Inclui as pilhas de kernel dos threads no processo.
- O sistema operacional não dá suporte a um despejo de kernel (-mk) ao usar um clone (-r).
- Ao usar vários tamanhos de despejo, um despejo de kernel é feito para cada tamanho de despejo.

Condições:

Condição Descrição
-a Evite interrupção. Requer -r. Se o gatilho fizer com que o destino seja suspenso por um tempo prolongado devido a um limite de despejo simultâneo excedido, o gatilho será ignorado.
-at Evite interrupção no Tempo Limite. Cancele a coleção do gatilho em N segundos.
-b Trate os pontos de interrupção de depuração como exceções (caso contrário, ignore-os).
-c Limite de CPU acima do qual criar um despejo do processo.
-cl Limite de CPU abaixo do qual criar um despejo do processo.
-dc Adicione a cadeia de caracteres especificada ao Comentário de Despejo gerado.
-e Grave um despejo quando o processo encontrar uma exceção sem tratamento.
Inclua o 1 para criar despejo em exceções de primeira chance.
Adicione -ld para criar um despejo quando uma DLL (módulo) for carregada (a filtragem se aplica).
Adicione -ud para criar um despejo quando uma DLL (módulo) for carregada (a filtragem se aplica).
Adicione -ct para criar um despejo quando um thread for criado.
Adicione -et para criar um despejo quando um thread for encerrado.
-f Filtre (inclua) o conteúdo das exceções, o registro em log de depuração e o nome do arquivo de carregamento/descarregamento da DLL. Há suporte para caracteres curinga (*).
-fx Filtre (exclua) o conteúdo das exceções, o registro em log de depuração e o nome do arquivo de carregamento/descarregamento da DLL. Há suporte para caracteres curinga (*).
-g Execute como um depurador nativo em um processo gerenciado (sem interoperabilidade).
-h Grave um despejo se o processo tiver uma janela suspensa (não responde às mensagens da janela por pelo menos 5 segundos).
-k Encerre o processo após a clonagem (-r) ou no final da coleção de despejo.
-l Exiba o registro em log de depuração do processo.
-m Limite de confirmação de memória em MB no qual criar um despejo.
-ml Gatilho para quando a confirmação de memória cair abaixo do valor de MB especificado.
-n Número de despejos a serem gravados antes de sair.
-o Substitua um arquivo de despejo existente.
-p Gatilho para quando o Contador de Desempenho estiver em ou exceder o limite especificado. Alguns Contadores e/ou Nomes de Instância podem diferenciar maiúsculas de minúsculas.
-pl Gatilho para quando o Contador de Desempenho ficar abaixo do limite especificado.
-r Despejo usando um clone. O limite simultâneo é opcional (padrão 1, máx. 5). - O sistema operacional não dá suporte a um despejo de kernel (-mk) ao usar um clone (-r). CUIDADO: um valor de alta simultaneidade pode afetar o desempenho do sistema.
- Windows 7: usa Reflexão. O sistema operacional não dá suporte a -e.
- Windows 8.0: usa Reflexão. O sistema operacional não dá suporte a -e.
- Windows 8.1+: usa PSS. Há suporte para todos os tipos de gatilho.
-s Segundos consecutivos antes de o despejo ser gravado (o padrão é 10).
-t Grave um despejo quando o processo for encerrado.
-u Trate o uso da CPU em relação a um único núcleo (usado com -c).
-v SOMENTE DEPURAÇÃO: saída detalhada.
-w Aguarde até que o processo especificado seja iniciado se ele não estiver em execução.
-wer Coloque o despejo (maior) na fila do Relatório de Erros do Windows.
-x Inicie a imagem especificada com argumentos opcionais. Se for um Aplicativo ou Pacote da Store, o ProcDump será iniciado na próxima ativação (somente).
-y OCULTO: ativação de aplicativo da Store.
-64 Por padrão, o ProcDump capturará um despejo de 32 bits de um processo de 32 bits ao ser executado no Windows de 64 bits. Essa opção substitui para criar um despejo de 64 bits. Use somente para depuração do subsistema WOW64.

Contrato de Licença:

Use a opção de linha de comando -accepteula para aceitar automaticamente o contrato de licença da Sysinternals.

Encerramento Automatizado:

-cancel <Target Process PID>

Usar essa opção ou definir um evento com o nome ProcDump-<PID> é o mesmo que digitar Ctrl+C para encerrar o ProcDump. O encerramento garante que o processo seja retomado se uma captura estiver ativa. O cancelamento se aplica a TODAS as instâncias do ProcDump que monitoram o processo.

Nome do arquivo:

Nome do arquivo de despejo padrão: PROCESSNAME_YYMMDD_HHMMSS.dmp

Há suporte para os seguintes substituições:

Substituição Explicação
PROCESSNAME Nome do Processo
PID ID do Processo
EXCEPTIONCODE Código de Exceção
AAMMDD Ano/Mês/Dia
HHMMSS Hora/Minuto/Segundo

Exemplos

  • Grave um mini despejo de um processo chamado “notepad” (somente uma correspondência pode existir):

    C:\>procdump notepad
    
  • Grave um despejo Full de um processo com PID “4572”:

    C:\>procdump -ma 4572
    
  • Grave um despejo Mini e, em seguida, um despejo completo de um processo com PID “4572”:

    C:\>procdump -mm -ma 4572
    
  • Grave três despejos Mini de cinco segundos de um processo chamado “notepad”:

    C:\>procdump -n 3 -s 5 notepad
    
  • Grave até três despejos Mini de um processo chamado “consume” quando exceder 20% do uso da CPU por cinco segundos:

    C:\>procdump -n 3 -s 5 -c 20 consume
    
  • Grave um despejo Mini para um processo chamado “hang.exe” quando uma de suas janelas não responder por mais de cinco segundos:

    C:\>procdump -h hang.exe
    
  • Grave um despejo Mini e Kernel para um processo chamado “hang.exe” quando uma de suas janelas não responder por mais de cinco segundos:

    C:\>procdump -ma -mk -h hang.exe
    
  • Grave um despejo Mini de um processo chamado “outlook” quando o uso total da CPU do sistema exceder 20% por dez segundos:

    C:\>procdump outlook -s 10 -p "\Processor(_Total)\% Processor Time" 20
    
  • Grave um despejo Full de um processo chamado “outlook” quando a contagem de identificadores do Outlook exceder 10.000:

    C:\>procdump -ma outlook -p "\Process(Outlook)\Handle Count" 10000
    
  • Grave um despejo Full do PID 1234 de “svchost”, Instância 87, quando a contagem de identificadores exceder 10.000:

    C:\>procdump -ma 1234 -p "\Process(svchost#87)\Handle Count" 10000
    

    Observação: Vários Contadores de Instância
    Se houver várias instâncias do contador, você precisará incluir o Nome e/ou o Número da instância.

    \Processor(NNN)\% Processor Time
    \Thermal Zone Information(<name>)\Temperature
    \Process(<name>[#NNN])\<counter>
    

    Os sistemas operacionais mais antigos exigem que você acrescente o PID para contadores \Process.

    \Process(<name>[_PID])\<counter>
    

    Dica: use o Monitor de Desempenho para exibir os contadores (diferenciação de maiúsculas e minúsculas).
    Dica: para contadores baseados em \Process(*), use o PowerShell para mapear um PID para seu #NNN.

    Get-Counter -Counter "\Process(*)\ID Process"
    
  • Grave um despejo Full para uma exceção de segunda chance:

    C:\>procdump -ma -e w3wp.exe
    
  • Grave um despejo Full para uma exceção de primeira e segunda chance:

    C:\>procdump -ma -e 1 w3wp.exe
    
  • Grave um despejo Full para uma mensagem de cadeia de caracteres de depuração:

    C:\>procdump -ma -l w3wp.exe
    
  • Grave até dez despejos Full de cada exceção de primeira ou segunda chance de w3wp.exe:

    C:\>procdump -ma -n 10 -e 1 w3wp.exe
    
  • Grave até dez despejos Full se o código/nome/msg de uma exceção contiver “NotFound”:

    C:\>procdump -ma -n 10 -e 1 -f NotFound w3wp.exe
    
  • Grave até dez despejos Full se uma mensagem de cadeia de caracteres de depuração contiver “NotFound”:

    C:\>procdump -ma -n 10 -l -f NotFound w3wp.exe
    
  • Aguarde um processo chamado “notepad” (e monitore-o em busca de exceções):

    C:\>procdump -e -w notepad
    
  • Inicie um processo chamado “notepad” (e monitore-o em busca de exceções):

    C:\>procdump -e -x c:\dumps notepad
    
  • Registre-se para iniciar e tente ativar um “aplicativo” da Store. Uma nova instância do ProcDump será iniciada quando for ativada:

    C:\>procdump -e -x c:\dumps Microsoft.BingMaps_8wekyb3d8bbwe!AppexMaps
    
  • Registre-se para iniciar um “pacote” da Store. Uma nova instância do ProcDump será iniciada quando for ativada (manualmente):

    C:\>procdump -e -x c:\dumps Microsoft.BingMaps_1.2.0.136_x64__8wekyb3d8bbwe
    
  • Grave um despejo MiniPlus do Microsoft Exchange Information Store quando ele tiver uma exceção sem tratamento:

    C:\>procdump -mp -e store.exe
    
  • Exibir sem gravar um despejo, os códigos/nomes de exceção de w3wp.exe:

    C:\>procdump -e 1 -f "" w3wp.exe
    
  • Windows 7/8.0; use a Reflexão para reduzir a interrupção de cinco gatilhos consecutivos:

    C:\>procdump -r -ma -n 5 -s 15 wmplayer.exe
    
  • Windows 8.1+; use o PSS para reduzir a interrupção de cinco gatilhos simultâneos:

    C:\>procdump -r 5 -ma -n 5 -s 15 wmplayer.exe
    
  • Instale o ProcDump como o depurador postmortem (AeDebug):

    C:\>procdump -ma -i c:\dumps
    

    ..ou..

    C:\Dumps>procdump -ma -i
    
  • Desinstale o ProcDump como o depurador postmortem (AeDebug):

    C:\>procdump -u
    

Veja uma lista de linhas de comando de exemplo (os exemplos são listados acima):

C:\>procdump -? -e

DownloadBaixar o ProcDump(714 KB)

Baixar o ProcDump para Linux (GitHub)

É executado em:

  • Cliente: Windows 8.1 e superior.
  • Servidor: Windows Server 2012 e superior.

Saiba mais