Condividi tramite


Utilità di analisi e raccolta di dump (dotnet-dump)

Questo articolo si applica a: ✔️ dotnet-dump versione 3.0.47001 e versioni successive

Nota

dotnet-dump per macOS è supportato solo con .NET 5 e versioni successive.

Installare

Esistono due modi per scaricare e installare dotnet-dump:

Nota

Per usare dotnet-dump in un'app x86, è necessaria una versione x86 corrispondente dello strumento.

Riepilogo

dotnet-dump [-h|--help] [--version] <command>

Descrizione

Lo strumento globale dotnet-dump consente di raccogliere e analizzare i dump in Windows, Linux e macOS senza che sia coinvolto alcun debugger nativo. Questo strumento è importante su piattaforme come Alpine Linux in cui non è disponibile un lavoro lldb completo. Lo strumento dotnet-dump consente di eseguire comandi SOS per analizzare gli arresti anomali e il Garbage Collector (GC), ma non è un debugger nativo, motivo per cui gli elementi come la visualizzazione di stack frame nativi non sono supportati.

Opzioni

  • --version

    Visualizza la versione dell'utilità dotnet-dump.

  • -h|--help

    Mostra la Guida della riga di comando.

Comandi

Comando
raccogli dotnet-dump
analizza dotnet-dump
ps dotnet-dump

raccogli dotnet-dump

Acquisisce un dump da un processo.

Riepilogo

dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag] [--crashreport]

Opzioni

  • -h|--help

    Mostra la Guida della riga di comando.

  • -p|--process-id <PID>

    Specifica il numero ID del processo da cui raccogliere un dump.

  • -n|--name <name>

    Specifica il nome del processo da cui raccogliere un dump.

  • --type <Full|Heap|Mini>

    Specifica il tipo di dump, che determina i tipi di informazioni raccolti dal processo. Sono disponibili tre tipi:

    • Full - Il dump più grande contenente tutta la memoria, incluse le immagini del modulo.
    • Heap - Dump di grandi dimensioni e relativamente completo contenente elenchi di moduli, elenchi di thread, tutti gli stack, le informazioni sulle eccezioni, informazioni di gestione e tutta la memoria, a eccezione delle immagini mappate.
    • Mini - Un dump di dimensioni limitate contenente elenchi di moduli, elenchi di thread, informazioni sulle eccezioni e tutti gli stack.
    • Triage - Un piccolo dump contenente elenchi di moduli, elenchi di thread, informazioni sulle eccezioni, tutti gli stack e le informazioni personali rimosse.

    Se non specificato, Full è l'impostazione predefinita.

  • -o|--output <output_dump_path>

    Percorso completo e nome del file in cui deve essere scritto il dump raccolto. Verificare che l'utente per il quale è in esecuzione il processo dotnet disponga delle autorizzazioni di scrittura per la directory specificata.

    Se non specificata:

    • L'impostazione predefinita è .\dump_YYYYMMDD_HHMMSS.dmp in Windows.
    • L'impostazione predefinita è ./core_YYYYMMDD_HHMMSS in Linux e macOS.

    AAAAMMGG è Anno/Mese/Giorno e HHMMSS è Ore/Minuti/Secondi.

  • --diag

    Abilita la registrazione diagnostica della raccolta dump.

  • --crashreport

    Abilita la generazione di report di arresto anomalo del sistema.

Nota

In Linux e macOS questo comando prevede che l'applicazione di destinazione e dotnet-dump condividano la stessa variabile di ambiente TMPDIR. In caso contrario, il comando raggiungerà il timeout.

Nota

Per raccogliere un dump utilizzando dotnet-dump, è necessario che venga eseguito come stesso utente che esegue il processo target o come radice. In caso contrario, lo strumento non riuscirà a stabilire una connessione con il processo di destinazione.

Nota

La raccolta di un dump completo o dell'heap può causare la pagina del sistema operativo in memoria virtuale sostanziale per il processo di destinazione. Se il processo di destinazione è in esecuzione in un contenitore con un limite di memoria applicato, l'utilizzo della memoria maggiore potrebbe causare l'interruzione del contenitore da parte del sistema operativo se il limite è stato superato. È consigliabile eseguire test per assicurarsi che il limite di memoria sia sufficientemente elevato. Un'altra opzione consiste nel modificare temporaneamente o rimuovere il limite prima della raccolta di dump se l'ambiente supporta questa operazione.

analizza dotnet-dump

Avvia una shell interattiva per esplorare un dump. La shell accetta vari comandi SOS.

Riepilogo

dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]

Argomenti

  • <dump_path>

    Specifica il percorso del file dump da analizzare.

Opzioni

  • -c|--command <debug_command>

    Esegue il comando all'avvio. È possibile usare più istanze di questo parametro in una chiamata per concatenare i comandi. I comandi verranno eseguiti nell'ordine in cui vengono forniti nella riga di comando. Se si vuole che dotnet dump venga chiuso dopo i comandi, l'ultimo comando deve essere "exit".

Analizzare i comandi SOS

Comando Funzione
analyzeoom Visualizza le informazioni dell'ultimo OOM che si è verificato in una richiesta di allocazione all'heap GC.
clrmodules Elenca i moduli gestiti nel processo.
clrstack Fornisce l'analisi dello stack del solo codice gestito.
clrthreads Elenca i thread gestiti in esecuzione.
clru Visualizza un disassembly con le annotazioni di un metodo gestito.
d oppure readmemory Esegue il dump del contenuto della memoria.
dbgout Abilita/disabilita (-off) la registrazione SOS interna.
dso Visualizza tutti gli oggetti gestiti trovati nell'ambito dei limiti dello stack corrente.
dumpalc Contiene dettagli relativi a un assemblyLoadContext raccoglibile in cui viene caricato l'oggetto specificato.
dumparray Contiene dettagli relativi a una matrice gestita.
dumpasync Contiene informazioni sulle macchine a stati asincrone nell'heap di Garbage Collection.
dumpassembly Contiene dettagli relativi a un assembly.
dumpclass Visualizza informazioni sulla struttura EEClass in corrispondenza dell'indirizzo specificato.
dumpconcurrentdictionary Illustra il contenuto del dizionario simultaneo.
dumpconcurrentqueue Illustra il contenuto della coda simultaneo.
dumpdelegate Contiene informazioni su un delegato.
dumpdomain Contiene informazioni su tutti gli assembly all'interno di tutti gli AppDomain o su quello specificato.
dumpgcdata Contiene informazioni sui dati GC.
dumpgen Illustra il contenuto dell'heap per la generazione specificata.
dumpheap Contiene informazioni sull'heap sottoposto a procedura di Garbage Collection e le statistiche di raccolta relative agli oggetti.
dumpil Visualizza il linguaggio intermedio comune (CIL) associato a un metodo gestito.
dumplog Scrive nel file specificato il contenuto di un log di stress in memoria.
dumpmd Visualizza informazioni sulla struttura MethodDesc in corrispondenza dell'indirizzo specificato.
dumpmodule Contiene informazioni su un modulo in corrispondenza dell'indirizzo specificato.
dumpmt Contiene informazioni sulla tabella dei metodi in corrispondenza dell'indirizzo specificato.
dumpobj Contiene informazioni sull'oggetto in corrispondenza dell'indirizzo specificato.
dumpruntimetypes Trova tutti gli oggetti System.RuntimeType nell'heap GC e stampa inoltre il nome del tipo e la MethodTable a cui fanno riferimento.
dumpsig Esegue il dump della firma di un metodo o di un campo specificato da <sigaddr> <moduleaddr>.
dumpsigelem VisuEffettua il dump di un singolo elemento di un oggetto firma.
dumpstackobjects Visualizza tutti gli oggetti gestiti trovati nell'ambito dei limiti dello stack corrente.
dumpvc Contiene informazioni sui campi di una classe valore.
eeheap Contiene informazioni sulla memoria del processo utilizzata dalle strutture dei dati di runtime interne.
eestack Esegue dumpstack su tutti i thread del processo.
eeversion Contiene informazioni sulle versioni di runtime e SOS.
ehinfo Visualizza i blocchi di gestione delle eccezioni in un metodo JIT.
exit oppure quit Esce dalla modalità interattiva.
finalizequeue Visualizza tutti gli oggetti registrati per la finalizzazione.
findappdomain Tenta di risolvere l'AppDomain di un oggetto GC.
gchandles Visualizza le statistiche relative agli handle del Garbage Collector nel processo.
gcheapstat Illustra le statistiche relative al Garbage Collector.
gcinfo Illustra la codifica GC JIT per un metodo.
gcroot Contiene informazioni sui riferimenti (o radici) all’oggetto in corrispondenza dell'indirizzo specificato.
gcwhere Mostra la posizione nell'heap GC dell'indirizzo specificato.
histclear Rilascia tutte le risorse utilizzate dalla famiglia di comandi Hist.
histinit Inizializza le strutture SOS dal log di stress salvato nell'oggetto del debug.
histobj Esamina tutti i record delle rilocazioni del log di stress e visualizza la catena di rilocazioni di Garbage Collection che hanno potuto condurre all'indirizzo passato come argomento.
histobjfind Contiene tutte le voci del log che fanno riferimento all’oggetto in corrispondenza dell'indirizzo specificato.
histroot Visualizza informazioni correlate sia alle promozioni sia alle rilocazioni della radice specificata.
histstats Contiene le statistiche del log di stress.
ip2md Visualizza la struttura MethodDesc in corrispondenza dell'indirizzo specificato nel codice con compilazione JIT.
listnearobj Visualizza l'oggetto precedente e successivo all'indirizzo specificato.
logopen Abilita la registrazione dei file della console.
logclose Disabilita la registrazione dei file della console.
logging Abilita/disabilita la registrazione SOS interna.
lm oppure modules Visualizza i moduli nativi nel processo.
name2ee Visualizza le strutture MethodTable e EEClass per il tipo o il metodo specificato nel modulo specificato.
objsize Visualizza la dimensione dell'oggetto specificato.
parallelstacks Visualizza lo stack di thread uniti in modo analogo al pannello Visual Studio "Stack paralleli".
pathto Visualizza il percorso GC da <root> a <target>.
pe oppure printexception Visualizza e formatta i campi di qualsiasi oggetto derivato dalla classe Exception in corrispondenza dell'indirizzo specificato.
r oppure registers Visualizza i registri del thread.
runtimes Elenca i runtime nella destinazione o modifica il runtime predefinito.
setclrpath Imposta il percorso per caricare i file coreclr dac/dbi usando setclrpath <path>.
setsymbolserver Abilita il supporto del server dei simboli.
sos Esegue vari comandi di debug coreclr. Usare la sintassi sos <command-name> <args>. Per altre informazioni, vedere "soshelp".
soshelp oppure help Visualizza tutti i comandi disponibili.
soshelp <command> oppure help <command> Visualizza il comando specificato.
syncblk Visualizza le informazioni sul supporto SyncBlock.
taskstate Mostra uno stato attività in un formato leggibile.
threadpool Contiene informazioni sul pool di thread di runtime.
threadpoolqueue Illustra gli elementi di lavoro del pool di thread in coda.
threadstate Stampa correttamente il significato di uno stato di thread.
threads <threadid> oppure setthread <threadid> Imposta o visualizza l'ID thread corrente per i comandi SOS.
timerinfo Visualizza informazioni sull'esecuzione dei timer.
token2ee Illustra la struttura MethodTable e la struttura MethodDesc per il token e il modulo specificati.
traverseheap Scrive informazioni sull'heap nel file specificato, in un formato leggibile dal profiler CLR.
verifyheap Controlla l'heap GC per verificare la presenza di segni di danneggiamento.
verifyobj Cerca segni di danneggiamento nell'oggetto passato come argomento.

Nota

Altri dettagli sono disponibili in SOS Debugging Extension for .NET.

ps dotnet-dump

Elenca i processi dotnet da cui è possibile raccogliere i dump. La versione 6.0.320703 di dotnet-dump e versioni successive visualizza anche gli argomenti della riga di comando con cui è stato avviato ogni processo, se disponibile.

Riepilogo

dotnet-dump ps [-h|--help]

Esempio

Si supponga di avviare un'app a esecuzione prolungata usando il comando dotnet run --configuration Release. In un'altra finestra si esegue il comando dotnet-dump ps. L'output visualizzato è il seguente. Gli argomenti della riga di comando, se presenti, vengono visualizzati nella versione 6.0.320703 di dotnet-dump e versioni successive.

> dotnet-dump ps

  21932 dotnet     C:\Program Files\dotnet\dotnet.exe   run --configuration Release
  36656 dotnet     C:\Program Files\dotnet\dotnet.exe

Utilizzo di dotnet-dump

Il primo passaggio consiste nel raccogliere un dump. Questo passaggio può essere ignorato se è già stato generato un dump principale. Il sistema operativo o la funzionalità di generazione .NET Core del runtime dump possono creare dump di base.

$ dotnet-dump collect --process-id 1902
Writing minidump to file ./core_20190226_135837
Written 98983936 bytes (24166 pages) to core file
Complete

Analizzare ora il dump principale con il comando analyze:

$ dotnet-dump analyze ./core_20190226_135850
Loading core dump: ./core_20190226_135850
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>

Questa azione conduce a una sessione interattiva che accetta comandi come:

> clrstack
OS Thread Id: 0x573d (0)
    Child SP               IP Call Site
00007FFD28B42C58 00007fb22c1a8ed9 [HelperMethodFrame_PROTECTOBJ: 00007ffd28b42c58] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[]) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]
00007FFD28B43210 00007fb22aa9cedf [GCFrame: 00007ffd28b43210]
00007FFD28B43610 00007fb22aa9cedf [GCFrame: 00007ffd28b43610]

Per visualizzare un'eccezione non gestita che ha terminato l'app:

> pe -lines
Exception object: 00007fb18c038590
Exception type:   System.Reflection.TargetInvocationException
Message:          Exception has been thrown by the target of an invocation.
InnerException:   System.Exception, Use !PrintException 00007FB18C038368 to see more.
StackTrace (generated):
SP               IP               Function
00007FFD28B42DD0 0000000000000000 System.Private.CoreLib.dll!System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Private.CoreLib.dll!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0xa7 [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.dll!SymbolTestApp.Program.Foo2(Int32, System.String)+0x34 [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.dll!SymbolTestApp.Program.Foo1(Int32, System.String)+0x3a [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.dll!SymbolTestApp.Program.Main(System.String[])+0x6e [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]

StackTraceString: <none>
HResult: 80131604

Analizzare le perdite di memoria e le allocazioni

Le perdite di memoria si verificano quando l'app contiene riferimenti a oggetti non più necessari, impedendo al Garbage Collector di recuperare memoria. Usare dotnet-dump per identificare le perdite di memoria, trovare gli oggetti più grandi e comprendere dove viene utilizzata la memoria.

Per una procedura dettagliata completa del debug di una perdita di memoria, vedere Debug una perdita di memoria in .NET.

Identificare gli oggetti più grandi

Usare il dumpheap comando con l'opzione -stat per visualizzare un riepilogo degli oggetti nell'heap, ordinati in base alle dimensioni totali:

> dumpheap -stat

Statistics:
              MT    Count    TotalSize Class Name
00007f6c1eeefba8      576        59904 System.Reflection.RuntimeMethodInfo
00007f6c1dc021c8     1749        95696 System.SByte[]
00000000008c9db0     3847       116080      Free
00007f6c1e784a18      175       128640 System.Char[]
00007f6c1dbf5510      217       133504 System.Object[]
00007f6c1dc014c0      467       416464 System.Byte[]
00007f6c21625038        6      4063376 testwebapi.Controllers.Customer[]
00007f6c20a67498   200000      4800000 testwebapi.Controllers.Customer
00007f6c1dc00f90   206770     19494060 System.String
Total 428516 objects

Questo output mostra quali tipi utilizzano la maggior parte della memoria. In questo esempio, System.String gli oggetti utilizzano circa 19 MB e Customer gli oggetti utilizzano circa 4,8 MB.

Identificare gli oggetti in base a spazio dei nomi o assembly

Per trovare i moduli o gli spazi dei nomi che utilizzano memoria, usare l'opzione -type con un nome di tipo parziale per filtrare i risultati:

> dumpheap -type MyCompany.Data -stat

Statistics:
              MT    Count    TotalSize Class Name
00007f6c21625038    15000      3600000 MyCompany.Data.CustomerRecord
00007f6c21625040     8000      2560000 MyCompany.Data.OrderHistory
00007f6c21625048     2000       960000 MyCompany.Data.ProductCache
Total 25000 objects, 7120000 bytes

Questo approccio consente di identificare le parti della codebase responsabili dell'utilizzo della memoria.

Trovare il numero più elevato di istanze

Per vedere quali tipi hanno la maggior parte delle istanze, indipendentemente dalle dimensioni totali, esaminare la colonna Conteggio nell'output dumpheap -stat . Gli oggetti con conteggi di istanze elevate possono indicare problemi di creazione o memorizzazione nella cache di oggetti inefficienti:

> dumpheap -stat

Statistics:
              MT    Count    TotalSize Class Name
00007f6c1dc00f90   206770     19494060 System.String
00007f6c20a67498   200000      4800000 testwebapi.Controllers.Customer
00007f6c1dc021c8     1749        95696 System.SByte[]

Questo esempio mostra 206.770 String istanze e 200.000 Customer istanze.

Analizzare i riferimenti agli oggetti con gcroot

Dopo aver identificato oggetti di grandi dimensioni o numerosi, usare gcroot per scoprire perché un oggetto non viene sottoposto a Garbage Collection. Il gcroot comando mostra la catena di riferimenti dalle radici GC a un oggetto specifico:

> dumpheap -mt 00007f6c20a67498
         Address               MT     Size
00007f6ad09421f8 00007f6c20a67498       24
...

> gcroot 00007f6ad09421f8

Thread 3f68:
    00007F6795BB58A0 00007F6C1D7D0745 testwebapi.Controllers.CustomerCache.GetAll()
        rbx:  (interior)
            ->  00007F6BDFFFF038 System.Object[]
            ->  00007F69D0033570 testwebapi.Controllers.Processor
            ->  00007F69D0033588 testwebapi.Controllers.CustomerCache
            ->  00007F69D00335A0 System.Collections.Generic.List`1[[testwebapi.Controllers.Customer]]
            ->  00007F6C000148A0 testwebapi.Controllers.Customer[]
            ->  00007F6AD0942258 testwebapi.Controllers.Customer

Found 1 root.

Questo output mostra che l'oggetto Customer è contenuto in un CustomerCache oggetto , che consente di identificare l'origine della perdita nel codice.

Analizzare la memoria in base alle dimensioni dell'oggetto

Usare le opzioni e -max per filtrare gli -min oggetti in base alle dimensioni:

> dumpheap -min 100000 -stat

Statistics:
              MT    Count    TotalSize Class Name
00007f6c21625038        6      4063376 testwebapi.Controllers.Customer[]
00007f6c1dc014c0       12       416464 System.Byte[]
Total 18 objects

Questo comando mostra solo oggetti di dimensioni superiori a 100.000 byte, consentendo di concentrarsi sui consumer di memoria più grandi.

Trova deadlock

Usare dotnet-dump per diagnosticare situazioni di deadlock in cui i thread sono bloccati in attesa di risorse. Per una procedura dettagliata completa per il debug dei deadlock, vedere Debug un deadlock in .NET.

Elencare tutti i thread

Usare il threads comando per visualizzare tutti i thread gestiti:

> threads
*0 0x1DBFF (121855)
 1 0x1DC01 (121857)
 2 0x1DC02 (121858)
 ...

Esaminare gli stack di thread

Usare clrstack -all per visualizzare gli stack di chiamate di tutti i thread:

> clrstack -all

Cercare modelli in cui più thread sono bloccati in Monitor.Enter o primitive di sincronizzazione simili.

Trovare i proprietari dei blocchi

Usare il syncblk comando per vedere quali thread contengono blocchi e quali thread sono in attesa:

> syncblk
Index         SyncBlock MonitorHeld Recursion Owning Thread Info          SyncBlock Owner
   43 00000246E51268B8          603         1 0000024B713F4E30 5634  28   00000249654b14c0 System.Object
   44 00000246E5126908            3         1 0000024B713F47E0 51d4  29   00000249654b14d8 System.Object

La colonna MonitorHeld mostra il numero di thread in attesa del blocco. La colonna Owning Thread Info (Informazioni thread proprietario ) mostra il thread proprietario del blocco.

Scenari avanzati di analisi della memoria

Confrontare più dump

Per comprendere la crescita della memoria nel tempo, raccogliere più dump e confrontarli:

  1. Raccogliere un dump di base: dotnet-dump collect -p <pid> -o baseline.dmp
  2. Lasciare che l'app esegua e consumi più memoria.
  3. Raccogliere un secondo dump: dotnet-dump collect -p <pid> -o after.dmp
  4. Analizzare i dump e confrontare i dumpheap -stat risultati.

Cercare i tipi con dimensioni totali molto maggiori o significativamente maggiori nel secondo dump.

Analizzare la memoria per tipi di oggetto specifici

Per eseguire il dump di tutte le istanze di un tipo specifico:

> dumpheap -type Customer
         Address               MT     Size
00007f6ad09421f8 00007f6c20a67498       24
00007f6ad0942210 00007f6c20a67498       24
...

dumpobj Usare quindi per esaminare i singoli oggetti:

> dumpobj 00007f6ad09421f8
Name:        testwebapi.Controllers.Customer
MethodTable: 00007f6c20a67498
EEClass:     00007f6c21625000
Size:        24(0x18) bytes
File:        /app/testwebapi.dll
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007f6c1dc00f90  4000001        8        System.String  0 instance 00007f6ad09421f0 Name
00007f6c1dbf4c18  4000002       10         System.Int32  1 instance               42 Id

Raccogliere un dump in un contenitore Docker

dotnet-dump richiede ptrace funzionalità nel contenitore. Un modo comune per concederle consiste nell'avviare il contenitore con --cap-add=SYS_PTRACE. A seconda dell'ambiente, potrebbe anche essere necessario modificare il profilo seccomp del contenitore. Vedere dump: domande frequenti per la diagnosi dei problemi di configurazione della sicurezza dei contenitori.

Per installare dotnet-dump in un'immagine di produzione senza .NET SDK, usare i collegamenti di download direct dalla sezione Installa oppure usare una build Docker multi-stage Docker per copiare i file binari degli strumenti da un'immagine SDK. Per indicazioni complete sulla diagnostica dei contenitori, vedere Raccogliere la diagnostica nei contenitori Linux.

Risoluzione dei problemi relativi alla raccolta di dump

La raccolta di dump richiede che il processo sia in grado di chiamare ptrace. Se si verificano problemi durante la raccolta dei dump, l'ambiente in cui viene effettuata l’esecuzione può essere configurato per limitare tali chiamate. Vedere Dump: domande frequenti per ottenere suggerimenti per la risoluzione dei problemi e possibili soluzioni ai problemi comuni.

Vedi anche