
Una versione per Linux dello strumento Sysinternals ProcDump
ProcDump è una reimmaginazione per Linux e Mac del classico strumento ProcDump della suite Sysinternals per Windows. ProcDump offre un modo conveniente per gli sviluppatori Linux e Mac di creare core dump delle loro applicazioni basati su trigger di performance. ProcDump per Linux e Mac fa parte di Sysinternals.

gdb >= 7.6.1Si prega di vedere le istruzioni di installazione qui.
Si prega di vedere le istruzioni di compilazione qui.
MODIFICA SOSTANZIALE Con il rilascio di ProcDump 1.3, gli switch sono ora allineati con la versione Windows di ProcDump. Si noti che la versione Mac attualmente ha un insieme limitato di trigger.
Capture Usage:
procdump [-n Count]
[-s Seconds]
[-c|-cl CPU_Usage]
[-m|-ml Commit_Usage1[,Commit_Usage2...]]
[-gcm [<GCGeneration>: | LOH: | POH:]Memory_Usage1[,Memory_Usage2...]]
[-gcgen Generation]
[-restrack [nodump]]
[-sr Sample_Rate]
[-tc Thread_Threshold]
[-fc FileDescriptor_Threshold]
[-sig Signal_Number1[,Signal_Number2...]]
[-e]
[-f Include_Filter,...]
[-fx Exclude_Filter]
[-mc Custom_Dump_Mask]
[-pf Polling_Frequency]
[-o]
[-log syslog|stdout]
{
{{[-w] Process_Name | [-pgid] PID} [Dump_File | Dump_Folder]}
}
Options:
-n Number of dumps to write before exiting.
-s Consecutive seconds before dump is written (default is 10).
-c CPU threshold above which to create a dump of the process.
-cl CPU threshold below which to create a dump of the process.
-m Memory commit threshold(s) (MB) above which to create dumps.
-ml Memory commit threshold(s) (MB) below which to create dumps.
-gcm [.NET] GC memory threshold(s) (MB) above which to create dumps for the specified generation or heap (default is total .NET memory usage).
-gcgen [.NET] Create dump when the garbage collection of the specified generation starts and finishes.
-restrack Enable memory leak tracking (malloc family of APIs). If used without other triggers, use 't' to manually capture a restrack report. When used with other triggers, the 'nodump' option can be used to prevent dump generation and only produce restrack report(s).
-sr Sample rate when using -restrack.
-tc Thread count threshold above which to create a dump of the process.
-fc File descriptor count threshold above which to create a dump of the process.
-sig Comma separated list of signal number(s) during which any signal results in a dump of the process.
-e [.NET] Create dump when the process encounters an exception.
-f Filter (include) on the content of .NET exceptions (comma separated). Wildcards (*) are supported.
-fx Filter (exclude) on the content of -restrack call stacks. Wildcards (*) are supported.
-mc Custom core dump mask (in hex) indicating what memory should be included in the core dump. Please see 'man core' (/proc/[pid]/coredump_filter) for available options.
-pf Polling frequency.
-o Overwrite existing dump file.
-log Writes extended ProcDump tracing to the specified output stream (syslog or stdout).
-w Wait for the specified process to launch if it's not running.
-pgid Process ID specified refers to a process group ID.
Lo switch -restrack attiva il rilevamento delle risorse, consentendo il monitoraggio e la segnalazione di qualsiasi allocazione di risorse che non è stata liberata al momento della generazione del core dump. I risultati vengono salvati in un file con estensione '.restrack'. Attualmente, vengono tracciate le seguenti funzioni di allocazione/deallocazione delle risorse:
Allocazione:
Deallocazione:
La versione Mac attualmente non implementa il rilevamento delle risorse.
I seguenti esempi hanno tutti come target un processo con pid == 1234
Il seguente creerà un core dump immediatamente.
sudo procdump 1234
Il seguente creerà 3 core dump a distanza di 10 secondi.
sudo procdump -n 3 1234
Il seguente creerà 3 core dump a distanza di 5 secondi.
sudo procdump -n 3 -s 5 1234
Il seguente creerà un core dump ogni volta che l'utilizzo della CPU del processo è >= 65%, fino a 3 volte, con almeno 10 secondi tra ogni dump.
sudo procdump -c 65 -n 3 1234
Il seguente creerà un core dump ogni volta che l'utilizzo della CPU del processo è >= 65%, fino a 3 volte, con almeno 5 secondi tra ogni dump.
sudo procdump -c 65 -n 3 -s 5 1234
Il seguente creerà un core dump quando l'utilizzo della CPU è al di fuori dell'intervallo [10,65].
sudo procdump -cl 10 -c 65 1234
Il seguente creerà un core dump quando l'utilizzo della CPU è >= 65% o l'utilizzo della memoria è >= 100 MB.
sudo procdump -c 65 -m 100 1234
Il seguente creerà un core dump quando l'utilizzo della memoria è >= 100 MB seguito da un altro dump quando l'utilizzo della memoria è >= 200 MB.
sudo procdump -m 100,200 1234
Il seguente creerà un report di memory leak (nessun dump) ogni volta che l'utente preme 't':
sudo procdump -restrack 1234
Il seguente creerà 3 report di memory leak (nessun dump) a distanza di 5 secondi:
sudo procdump -n 3 -s 5 -restrack nodump 1234
Il seguente creerà un core dump e un report di memory leak quando l'utilizzo della memoria è >= 100 MB
sudo procdump -m 100 -restrack 1234
Il seguente creerà un report di memory leak (nessun dump) quando l'utilizzo della memoria è >= 100 MB
sudo procdump -m 100 -restrack nodump 1234
Il seguente creerà un core dump e un report di memory leak quando l'utilizzo della memoria è >= 100 MB campionando ogni decima allocazione di memoria.
sudo procdump -m 100 -restrack -sr 10 1234
Il seguente creerà un core dump e un report di memory leak quando l'utilizzo della memoria è >= 100 MB ed esclude tutti gli stack di chiamate che contengono frame con la stringa "cache"
sudo procdump -m 100 -restrack -fx *cache* 1234
Il seguente creerà un core dump quando l'utilizzo totale della memoria .NET è >= 100 MB seguito da un altro dump quando l'utilizzo della memoria è >= 200 MB.
sudo procdump -gcm 100,200 1234
Il seguente creerà un core dump quando l'utilizzo della memoria .NET per la generazione 1 è >= 1 MB seguito da un altro dump quando l'utilizzo della memoria è >= 2 MB.
sudo procdump -gcm 1:1,2 1234
Il seguente creerà un core dump quando l'utilizzo della memoria .NET Large Object Heap è >= 100 MB seguito da un altro dump quando l'utilizzo della memoria è >= 200 MB.
sudo procdump -gcm LOH:100,200 1234
Il seguente creerà un core dump all'inizio e alla fine di una garbage collection della generazione 1 .NET.
sudo procdump -gcgen 1
Il seguente creerà un core dump immediatamente nella directory /tmp.
sudo procdump 1234 /tmp
Il seguente creerà un core dump nella directory corrente con il nome dump_0.1234. Se viene usato -n, i file saranno nominati dump_0.1234, dump_1.1234 e così via.
sudo procdump 1234 dump
Il seguente creerà un core dump quando si verifica un SIGSEGV.
sudo procdump -sig 11 1234
Il seguente creerà un core dump quando si verifica un SIGSEGV in cui il core dump contiene solo mapping privati anonimi.
sudo procdump -mc 1 -sig 11 1234
Il seguente creerà un core dump quando l'applicazione .NET di destinazione lancia una System.InvalidOperationException
sudo procdump -e -f System.InvalidOperationException 1234
Il filtro di inclusione supporta la corrispondenza parziale e con wildcard, quindi anche il seguente creerà un core dump per una System.InvalidOperationException
sudo procdump -e -f InvalidOperation 1234
oppure
sudo procdump -e -f "*Invali*Operation*" 1234
Tutte le opzioni possono anche essere usate con
-w, per attendere qualsiasi processo con il nome specificato.
Il seguente attende un processo chiamato my_application e crea un core dump immediatamente quando viene trovato.
sudo procdump -w my_application
Se sei interessato a risolvere problemi e contribuire direttamente al codice, consulta il documento Come contribuire, che copre quanto segue:
Consulta anche il nostro Codice di condotta.
Copyright (c) Microsoft Corporation. Tutti i diritti riservati.
Concesso in licenza secondo i termini della MIT License.
ProcDump per Linux: