ProcDump v11.0

Di Mark Russinovich e Andrew Richards

Data di pubblicazione: 03 novembre 2022

DownloadScaricare ProcDump(714 KB)

Scaricare ProcDump per Linux (GitHub)

Creato con ZoomIt

Introduzione

ProcDump è un'utilità della riga di comando il cui scopo principale è il monitoraggio di un'applicazione in termini di picchi della CPU e la generazione di dump di arresto anomalo durante un picco per consentire a un amministratore o uno sviluppatore di determinare la causa del picco. ProcDump include anche il monitoraggio delle finestre bloccate (usando la stessa definizione di finestra bloccata applicata da Windows e Task Manager) e il monitoraggio delle eccezioni non gestite e può generare dump basati sui valori dei contatori delle prestazioni di sistema. Può anche svolgere la funzione di utilità generale di dump dei processi da incorporare in altri script.

Utilizzo di ProcDump

Utilizzo di acquisizione:

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, ...]}
            }

Utilizzo di installazione:

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

Utilizzo di disinstallazione:

procdump.exe -u

Tipi di dump:

Tipo di dump Descrizione
-mm Scrive un file di dump "Mini". (predefinito)
- Include memoria a cui si fa riferimento in modo diretto e indiretto (stack e quello a cui si fa riferimento).
- Include tutti i metadati (processo, thread, modulo, handle, spazio indirizzi e così via).
-ma Scrive un file di dump "Completo".
- Include tutta la memoria (immagine, mappata e privata).
- Include tutti i metadati (processo, thread, modulo, handle, spazio indirizzi e così via).
-mt Scrive un file di dump "Triage".
- Include la memoria a cui si fa riferimento in modo diretto (stack).
- Include metadati limitati (processo, thread, modulo e handle).
- Viene tentata, ma non garantita, la rimozione di informazioni riservate.
-mp Scrive un file di dump "MiniPlus".
- Include tutta la memoria privata e tutta la memoria mappata o le immagini di lettura/scrittura.
- Include tutti i metadati (processo, thread, modulo, handle, spazio indirizzi e così via).
- Per ridurre al minimo le dimensioni, viene esclusa l'area di memoria privata più grande, se superiore a 512 MB.
  Un'area di memoria viene definita come somma delle allocazioni di memoria di pari dimensioni.
  Il dump è dettagliato come un dump completo, ma di dimensioni inferiori del 10%-75%.
- Nota: a causa delle limitazioni di debug, il dump dei processi CLR viene eseguito come completo (-ma).
-mc Scrive un file di dump "Personalizzato".
- Include la memoria e i metadati definiti dalla maschera MINIDUMP_TYPE specificata (esadecimale).
-md Scrive un file di dump "Callback".
- Include la memoria definita dalla routine di callback MiniDumpWriteDump (denominata MiniDumpCallbackRoutine) della DLL specificata.
- Include tutti i metadati (processo, thread, modulo, handle, spazio indirizzi e così via).
-mk Scrive anche un file di dump "Kernel".
- Include gli stack del kernel dei thread inclusi nel processo.
- Il sistema operativo non supporta un dump del kernel (-mk) quando si usa un clone (-r).
- Quando si usano più dimensioni di dump, viene eseguito un dump del kernel per ogni dimensione del dump.

Condizioni:

Condizione Descrizione
-a Evitare interruzioni. Richiede -r. Se il trigger causerà la sospensione della destinazione per un tempo prolungato a causa del superamento del limite di dump simultanei, il trigger verrà ignorato.
-at Evitare interruzioni durante il timeout. Annullare la raccolta del trigger a N secondi.
-b Considerare i punti di interruzione di debug come eccezioni (in caso contrario, vengono ignorati).
-c Soglia della CPU al di sopra della quale viene creato un dump del processo.
-cl Soglia della CPU al di sotto della quale viene creato un dump del processo.
-dc Aggiungere la stringa specificata al commento del dump generato.
-e Scrivere un dump quando il processo rileva un'eccezione non gestita.
Includere 1 per creare dump sulle eccezioni di prima possibilità.
Aggiungere -ld per creare un dump quando viene caricata una DLL (modulo): viene applicato un filtro.
Aggiungere -ud per creare un dump quando viene scaricata una DLL (modulo): viene applicato un filtro.
Aggiungere -ct per creare un dump quando viene creato un thread.
Aggiungere -et per creare un dump se esiste già un thread.
-f Filtrare (includere) il contenuto delle eccezioni, la registrazione di debug e il nome del file nel momento in cui viene caricata/scaricata la DLL. I caratteri jolly sono supportati.
-fx Filtrare (includere) il contenuto delle eccezioni, la registrazione di debug e il nome del file nel momento in cui viene caricata/scaricata la DLL. I caratteri jolly sono supportati.
-g Impostare l'esecuzione come debugger nativo in un processo gestito (nessuna interoperabilità).
-h Scrivere un dump se il processo ha una finestra bloccata (non risponde ai messaggi della finestra per almeno 5 secondi).
-k Terminare il processo dopo la clonazione (-r) o alla fine della raccolta di dump.
-l Visualizzare la registrazione di debug del processo.
-m Soglia di commit della memoria (in MB) in corrispondenza della quale creare un dump.
-ml Attivare quando il commit della memoria scende al di sotto del valore di MB specificato.
-n Numero di dump da scrivere prima di uscire.
-o Sovrascrivere un file di dump esistente.
-p Attivare quando il contatore delle prestazioni raggiunge o supera la soglia specificata. Alcuni contatori e/o nomi di istanza possono fare distinzione tra maiuscole e minuscole.
-pl Attivare quando il contatore delle prestazioni scende al di sotto della soglia specificata.
-r Eseguire il dump usando un clone. Il limite simultaneo è facoltativo (valore predefinito 1, massimo 5). Il sistema operativo non supporta un dump del kernel (-mk) quando si usa un clone (-r). ATTENZIONE: un valore di concorrenza elevato può influire sulle prestazioni del sistema.
- Windows 7: usa la reflection. Il sistema operativo non supporta -e.
- Windows 8.0: usa la reflection. Il sistema operativo non supporta -e.
- Windows 8.1+: usa PSS. Sono supportati tutti i tipi di trigger.
-s Secondi consecutivi prima che venga scritto un dump (il valore predefinito è 10).
-t Scrivere un dump al termine del processo.
-u Gestire l'utilizzo della CPU rispetto a un singolo core (usato con -c).
-v DEBUG ONLY (SOLO DEBUG): output dettagliato.
-w Attendere l'avvio del processo specificato, se non è in esecuzione.
-wer Accodare il dump (più grande) a Segnalazione errori Windows.
-x Avviare l'immagine specificata con argomenti facoltativi. Se si tratta di un'applicazione Store o di un pacchetto, ProcDump verrà avviato all'attivazione successiva (solo).
-y HIDDEN (NASCOSTO): attivazione dell'applicazione Store.
-64 Per impostazione predefinita, ProcDump acquisisce un dump a 32 bit di un processo a 32 bit eseguito in Windows a 64 bit. Questa opzione sostituisce l'impostazione predefinita per creare un dump a 64 bit. Usare solo per il debug di un sottosistema WOW64.

Contratto di licenza:

Usare l'opzione della riga di comando -accepteula per accettare automaticamente il contratto di licenza Sysinternals.

Chiusura automatizzata:

-cancel <Target Process PID>

L'uso di questa opzione o l'impostazione di un evento con il nome ProcDump-<PID> equivale a digitare CTRL+C per terminare normalmente ProcDump. Quando un processo viene terminato normalmente, può essere ripristinato se è attiva un'acquisizione. L'annullamento si applica a TUTTE le istanze di ProcDump che monitorano il processo.

Nome file:

Nome file di dump predefinito: PROCESSNAME_YYMMDD_HHMMSS.dmp

Sono supportate le seguenti sostituzioni:

Sostituzione Spiegazione
PROCESSNAME Nome processo
PID Process ID
EXCEPTIONCODE Codice eccezione
AAMMGG Anno/Mese/Giorno
HHMMSS Ora/Minuti/Secondi

Esempi

  • Scrivere un dump Mini di un processo denominato "notepad" (può esistere una sola corrispondenza):

    C:\>procdump notepad
    
  • Scrivere un dump Completo di un processo con PID "4572":

    C:\>procdump -ma 4572
    
  • Scrivere prima un dumo Mini e quindi un dump Completo di un processo con PID "4572":

    C:\>procdump -mm -ma 4572
    
  • Scrivere 3 dump Mini a distanza di 5 secondi l'uno dall'altro di un processo chiamato "notepad":

    C:\>procdump -n 3 -s 5 notepad
    
  • Scrivere fino a 3 dump Mini di un processo chiamato "consume" quando supera il 20% di utilizzo della CPU per cinque secondi:

    C:\>procdump -n 3 -s 5 -c 20 consume
    
  • Scrivere un dump Mini per un processo chiamato "hang.exe" quando una delle finestre non risponde per più di 5 secondi:

    C:\>procdump -h hang.exe
    
  • Scrivere un dump Completo e Kernel per un processo chiamato "hang.exe" quando una delle finestre non risponde per più di 5 secondi:

    C:\>procdump -ma -mk -h hang.exe
    
  • Scrivere un dump Mini di un processo denominato "outlook" quando l'utilizzo totale della CPU di sistema supera il 20% per 10 secondi:

    C:\>procdump outlook -s 10 -p "\Processor(_Total)\% Processor Time" 20
    
  • Scrivere un dump Completo di un processo denominato "outlook" quando il numero di handle di Outlook supera 10.000:

    C:\>procdump -ma outlook -p "\Process(Outlook)\Handle Count" 10000
    
  • Scrivere un dump Completo di 'svchost' PID 1234, Istanza #87, quando il numero di handle supera 10.000:

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

    Nota: più contatori di istanze
    Se sono presenti più istanze del contatore, è necessario includere il nome e/o il numero di istanza.

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

    I sistemi operativi meno recenti richiedono di aggiungere il PID per i contatori \Process.

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

    Suggerimento: usare Monitoraggio prestazioni per visualizzare i contatori (in particolare, la distinzione tra maiuscole e minuscole).
    Suggerimento: per i contatori basati su \Process(*), usare PowerShell per eseguire il mapping di un PID a #NNN.

    Get-Counter -Counter "\Process(*)\ID Process"
    
  • Scrivere un dump Completo per un'eccezione di seconda possibilità:

    C:\>procdump -ma -e w3wp.exe
    
  • Scrivere un dump Completo per un'eccezione di prima o seconda possibilità:

    C:\>procdump -ma -e 1 w3wp.exe
    
  • Scrivere un dump Completo per un messaggio stringa di debug:

    C:\>procdump -ma -l w3wp.exe
    
  • Scrivere fino a 10 dump Completi per ogni eccezione di prima o seconda possibilità di w3wp.exe:

    C:\>procdump -ma -n 10 -e 1 w3wp.exe
    
  • Scrivere fino a 10 dump Completi se il codice/nome/messaggio di un'eccezione contiene 'NotFound':

    C:\>procdump -ma -n 10 -e 1 -f NotFound w3wp.exe
    
  • Scrivere fino a 10 dump Completi se un messaggio stringa di debug contiene 'NotFound':

    C:\>procdump -ma -n 10 -l -f NotFound w3wp.exe
    
  • Attendere un processo denominato "notepad" (e monitorarlo per eventuali eccezioni):

    C:\>procdump -e -w notepad
    
  • Avviare un processo denominato "notepad" (e monitorarlo per eventuali eccezioni):

    C:\>procdump -e -x c:\dumps notepad
    
  • Registrarsi per l'avvio e tentare di attivare un'applicazione Store. Nel momento in cui verrà attivata, si avvierà una nuova istanza ProcDump:

    C:\>procdump -e -x c:\dumps Microsoft.BingMaps_8wekyb3d8bbwe!AppexMaps
    
  • Registrarsi per l'avvio di un pacchetto Store. Nel momento in cui verrà attivato (manualmente), si avvierà una nuova istanza ProcDump:

    C:\>procdump -e -x c:\dumps Microsoft.BingMaps_1.2.0.136_x64__8wekyb3d8bbwe
    
  • Scrivere un dump MiniPlus di Microsoft Exchange Information Store quando presenta un'eccezione non gestita:

    C:\>procdump -mp -e store.exe
    
  • Visualizzare, senza scrivere un dump, i codici/nomi delle eccezioni di w3wp.exe:

    C:\>procdump -e 1 -f "" w3wp.exe
    
  • Windows 7/8.0; usare Reflection per ridurre l'interruzione in caso di 5 trigger consecutivi:

    C:\>procdump -r -ma -n 5 -s 15 wmplayer.exe
    
  • Windows 8.1+; usare Reflection per ridurre l'interruzione in caso di 5 trigger consecutivi:

    C:\>procdump -r 5 -ma -n 5 -s 15 wmplayer.exe
    
  • Installare ProcDump come debugger postmortem (AeDebug):

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

    ..oppure..

    C:\Dumps>procdump -ma -i
    
  • Disinstallare ProcDump come debugger postmortem (AeDebug):

    C:\>procdump -u
    

Vedere un elenco di righe di comando di esempio (gli esempi sono elencati sopra):

C:\>procdump -? -e
  • Libro Windows Internals La pagina ufficiale degli aggiornamenti e delle correzioni del libro definitivo su Windows Internals, di Mark Russinovich e David Solomon.
  • Riferimento per l'amministratore di Windows Sysinternals La guida ufficiale alle utilità Sysinternals di Mark Russinovich e Aaron Margosis, che include la descrizione di tutti gli strumenti, le relative funzionalità, l'uso per la risoluzione dei problemi e casi reali di utilizzo.

DownloadScaricare ProcDump(714 KB)

Scaricare ProcDump per Linux (GitHub)

In esecuzione su:

  • Client: Windows 8.1 e versioni successive.
  • Server: Windows Server 2012 e versioni successive.

Ulteriori informazioni