Quali strumenti di diagnostica sono disponibili in .NET Core?

Il software non sempre si comporta come previsto, ma .NET Core offre strumenti e API utili per diagnosticare questi problemi in modo rapido ed efficace.

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 forniscono informazioni approfondite sul comportamento del codice. Un debugger è una buona scelta per diagnosticare i problemi funzionali che possono essere facilmente riprodotti.

Unit test

Il testing unità è un componente chiave dell'integrazione continua e della distribuzione di software di alta qualità. Gli unit test sono progettati per offrire avvisi in anticipo in caso di problemi funzionali.

Strumentazione per l'osservabilità

.NET supporta tecniche di strumentazione standard del settore che usano metriche, log e tracce distribuite, comunemente note come i 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. 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.

Registri

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à.

Metrica

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 sempre attivi. 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 gli errori e i 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 per far uscire i dati di strumentazione dall'applicazione, tra cui:

Monitoraggio delle risorse

Il monitoraggio delle risorse è il processo di osservazione e monitoraggio continuo dell'utilizzo, delle prestazioni e della disponibilità di varie risorse di calcolo all'interno di un sistema. Queste risorse possono includere componenti hardware, ad esempio CPU, memoria, archiviazione su disco e interfacce di rete, nonché componenti software (ad esempio applicazioni e servizi). Il monitoraggio delle risorse viene spesso usato per rilevare e diagnosticare i problemi di prestazioni e per assicurarsi che il sistema funzioni entro i parametri previsti.

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 di diagnostica .NET Core

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. Cercare informazioni nella guida di riferimento all'API Microsoft.Diagnostics.NETCore.Client.

Eseguire il debug di una perdita di memoria

L’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

L’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.

Eseguire il debug di un deadlock

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

Debug della starvation di ThreadPool

L’Esercitazione: Eseguire il debug della starvation di threadPool illustra come usare gli strumenti dotnet-counters e dotnet-stack per analizzare la starvation di ThreadPool.

Eseguire il debug di uno StackOverflow

L’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.