Condividi tramite


Diagnostica in .NET

Il software non si comporta sempre come previsto, ma .NET include strumenti e API che consentono di diagnosticare questi problemi in modo rapido ed efficace.

La distribuzione AOT nativa è un modello di applicazione disponibile a partire da .NET 7. Per informazioni sul supporto di diagnostica .NET 8 per le app AOT native, vedere Diagnostica AOT nativa.

Questo articolo consente di trovare i vari strumenti necessari.

Debugger

I debugger consentono di interagire con il programma. La sospensione, l'esecuzione incrementale, l'analisi e la ripresa offrono informazioni dettagliate sul comportamento del codice. Un debugger è una buona scelta per diagnosticare i problemi funzionali che possono essere facilmente riprodotti.

Profiler

I profiler consentono di analizzare le prestazioni del programma. È possibile raccogliere dati sull'utilizzo della memoria, sull'utilizzo della CPU e altre metriche per diagnosticare e comprendere i problemi di prestazioni.

Strumentazione per l'osservabilità

.NET supporta tecniche di strumentazione standard del settore che usano metriche, log e tracce distribuite, comunemente note come tre pilastri dell'osservabilità.

La strumentazione è il codice aggiunto a un progetto software per registrare le operazioni che sta eseguendo. Queste informazioni possono quindi essere raccolte in file, database o in memoria e analizzate per comprendere il funzionamento di un programma software. Questo viene spesso usato negli ambienti di produzione per monitorare i problemi e diagnosticarli. Il runtime .NET include la strumentazione predefinita che può essere abilitata facoltativamente e api che consentono di aggiungere strumentazione personalizzata specializzata per l'applicazione.

Registrazioni

La registrazione è una tecnica in cui il codice viene instrumentato per produrre un log, un record di eventi interessanti che si sono verificati durante l'esecuzione del programma. Spesso un set di base di eventi di log è configurato per impostazione predefinita e la registrazione più estesa può essere abilitata su richiesta per diagnosticare problemi specifici. Il sovraccarico delle prestazioni è variabile a seconda della quantità di dati registrati.

Per la maggior parte dei casi, se si aggiunge la registrazione a un progetto esistente o si crea un nuovo progetto, l'infrastruttura ILogger è una scelta predefinita ottimale. ILogger supporta la registrazione strutturata veloce, la configurazione flessibile e una raccolta di sink comuni , inclusa la console, che è ciò che viene visualizzato quando si esegue un'app ASP.NET. Inoltre, l'interfaccia ILogger può fungere anche da facciata su molte implementazioni di registrazione di terze parti che offrono funzionalità avanzate ed estendibilità.

Metriche

Le metriche sono misurazioni numeriche registrate nel tempo per monitorare le prestazioni e l'integrità dell'applicazione. Le metriche vengono spesso usate per generare avvisi quando vengono rilevati potenziali problemi. Le metriche hanno un sovraccarico delle prestazioni molto basso e molti servizi li configurano come dati di telemetria always-on. Le eccezioni vengono spesso registrate come metriche e possono essere riepilogate per ridurre la cardinalità dei dati. Per altre informazioni, vedere Riepilogo delle eccezioni.

Tracce distribuite

La traccia distribuita è una forma specializzata di registrazione che consente di localizzare errori e problemi di prestazioni all'interno delle applicazioni distribuite tra più computer o processi. Questa tecnica tiene traccia delle richieste tramite un'applicazione che correla il lavoro svolto da diversi componenti dell'applicazione e la separazione da altre operazioni che l'applicazione può eseguire per le richieste simultanee. È possibile tracciare ogni richiesta e il campionamento può essere usato facoltativamente per associare il sovraccarico delle prestazioni.

Raccogliere la strumentazione

Esistono diversi modi in cui i dati di strumentazione possono essere egressi dall'applicazione, tra cui:

Diagnostica specializzata

Se il debug o l'osservabilità non è sufficiente, .NET supporta meccanismi di diagnostica aggiuntivi, ad esempio EventSource, Dump, DiagnosticSource. Per altre informazioni, vedere l'articolo relativo alla diagnostica specializzata .

Strumenti di diagnostica

.NET supporta diversi strumenti dell'interfaccia della riga di comando che possono essere usati per diagnosticare le applicazioni.

Esercitazioni sulla diagnostica di .NET Core

Debuggare una perdita di memoria

Esercitazione: Eseguire il debug di una perdita di memoria illustra la ricerca di una perdita di memoria. Lo strumento dotnet-counters viene usato per confermare la perdita e lo strumento dotnet-dump viene usato per diagnosticare la perdita.

Eseguire il debug dell'uso elevato della CPU

Esercitazione: Eseguire il debug di un utilizzo elevato della CPU illustra l'analisi dell'utilizzo elevato della CPU. Usa lo strumento dotnet-counters per confermare l'utilizzo elevato della CPU. Illustra quindi l'uso di Trace per l'utilità di analisi delle prestazioni (dotnet-trace) o Linux perf per raccogliere e visualizzare il profilo di utilizzo della CPU.

Debug del deadlock

Esercitazione: Eseguire il debug di deadlock illustra come usare lo strumento dotnet-dump per analizzare i thread e i blocchi.

Debug ThreadPool Starvation

Esercitazione: Debug threadPool starvation illustra come usare gli strumenti dotnet-counters e dotnet-stack per analizzare la fame di ThreadPool.

Eseguire il debug di un oggetto StackOverflow

Esercitazione: Eseguire il debug di uno StackOverflow illustra come eseguire il debug di un oggetto StackOverflowException in Linux.

Eseguire il debug di dump di Linux

Eseguire il debug dei dump di Linux illustra come raccogliere e analizzare i dump in Linux.

Misurare le prestazioni con EventCounters

Esercitazione: Misurare le prestazioni usando EventCounters in .NET illustra come usare l'API EventCounter per misurare le prestazioni nell'app .NET.

Scrivere uno strumento di diagnostica personalizzato

La libreria client di diagnostica consente di scrivere uno strumento di diagnostica personalizzato più adatto per lo scenario di diagnostica. Per altre informazioni, vedere le informazioni di riferimento sull'API Microsoft.Diagnostics.NETCore.Client.