Compartir a través de


Diagnósticos en .NET

El software no siempre se comporta como cabría esperar, pero .NET tiene herramientas y API que le ayudarán a diagnosticar estos problemas de forma rápida y eficaz.

La implementación nativa de AOT es un modelo de aplicación que está disponible desde .NET 7. Para obtener información sobre la compatibilidad de diagnóstico de .NET 8 con aplicaciones AOT nativas, consulte Diagnósticos de AOT nativos.

Este artículo le ayuda a encontrar las distintas herramientas que necesita.

Depuradores

Los depuradores permiten interactuar con el programa. La pausa, la ejecución incremental, el examen y la reanudación proporcionan información sobre el comportamiento del código. Un depurador es una buena opción para diagnosticar problemas funcionales que se pueden reproducir fácilmente.

Perfiladores

Los generadores de perfiles permiten analizar el rendimiento del programa. Puede recopilar datos sobre el uso de memoria, el uso de CPU y otras métricas para diagnosticar y comprender los problemas de rendimiento.

Instrumentación para la observabilidad

.NET admite técnicas de instrumentación estándar del sector mediante métricas, registros y seguimientos distribuidos, conocidos normalmente como los tres pilares de observabilidad.

La instrumentación es código que se agrega a un proyecto de software para registrar lo que está haciendo. Esta información se puede recopilar en archivos, bases de datos o en memoria y analizarse para comprender cómo funciona un programa de software. Esto suele usarse en entornos de producción para supervisar los problemas y diagnosticarlos. El entorno de ejecución de .NET tiene instrumentación integrada que se puede habilitar opcionalmente y las API que permiten agregar instrumentación personalizada especializada para la aplicación.

Registros

El registro es una técnica en la que el código se instrumenta para generar un registro, un registro de eventos interesantes que se produjeron mientras se estaba ejecutando el programa. A menudo, un conjunto de línea base de eventos de registro se configura de forma predeterminada y se puede habilitar un registro más extenso a petición para diagnosticar problemas concretos. La sobrecarga de rendimiento es variable en función de la cantidad de datos que se registran.

En la mayoría de los casos, si se agrega el registro a un proyecto existente o se crea un nuevo proyecto, la infraestructura de ILogger es una buena opción predeterminada. ILogger admite el registro estructurado rápido, la configuración flexible y una colección de receptores comunes , incluida la consola, que es lo que ve al ejecutar una aplicación de ASP.NET. Además, la ILogger interfaz también puede servir como fachada en muchas implementaciones de registro de terceros que ofrecen funcionalidad enriquecida y extensibilidad.

Metrics

Las métricas son medidas numéricas registradas con el tiempo para supervisar el rendimiento y el estado de las aplicaciones. Las métricas se suelen usar para generar alertas cuando se detectan posibles problemas. Las métricas tienen una sobrecarga de rendimiento muy baja y muchos servicios los configuran como telemetría siempre activa. Las excepciones se suelen registrar como métricas y se pueden resumir para reducir la cardinalidad de los datos. Para obtener más información, vea Resumen de excepciones.

Seguimientos distribuidos

El seguimiento distribuido es una forma especializada de registro que le ayuda a localizar errores y problemas de rendimiento dentro de las aplicaciones distribuidas entre varias máquinas o procesos. Esta técnica realiza un seguimiento de las solicitudes a través de una aplicación que correlaciona el trabajo conjunto realizado por distintos componentes de la aplicación y lo separa de otro trabajo que la aplicación puede estar realizando para solicitudes simultáneas. Es posible realizar un seguimiento de todas las solicitudes y el muestreo se pueden emplear opcionalmente para enlazar la sobrecarga de rendimiento.

Recopilación de instrumentación

Hay varias maneras de que los datos de instrumentación se puedan salir de la aplicación, entre las que se incluyen:

Diagnósticos especializados

Si la depuración o observabilidad no es suficiente, .NET admite mecanismos de diagnóstico adicionales, como EventSource, Dumps, DiagnosticSource. Para más información, consulte el artículo diagnósticos especializados .

Herramientas de diagnóstico

.NET admite varias herramientas de la CLI que se pueden usar para diagnosticar las aplicaciones.

Tutoriales de diagnóstico de .NET Core

Depuración de una fuga de memoria

Tutorial: Depuración de una pérdida de memoria le guía a través de la búsqueda de una pérdida de memoria. La herramienta dotnet-counters se usa para confirmar la fuga y la herramienta dotnet-dump se usa para diagnosticar la fuga.

Depuración del uso elevado de CPU

Tutorial: Depuración de un uso elevado de CPU le guía a través de la investigación del uso elevado de CPU. Usa la herramienta dotnet-counters para confirmar el uso elevado de la CPU. A continuación, le guía por el uso de trace para la utilidad de análisis de rendimiento (dotnet-trace) o Linux perf para recopilar y ver el perfil de uso de CPU.

Interbloqueo de depuración

Tutorial: Depuración de interbloqueo muestra cómo usar la herramienta dotnet-dump para investigar subprocesos y bloqueos.

Depuración del hambre de ThreadPool

Tutorial: Depuración de subprocesos DebugPool starvation muestra cómo usar las herramientas dotnet-counters y dotnet-stack para investigar el colapso de ThreadPool.

Depuración de stackOverflow

Tutorial: Depuración de stackOverflow muestra cómo depurar un StackOverflowException en Linux.

Depuración de volcados de memoria de Linux

Depuración de volcados de Linux explica cómo recopilar y analizar volcados en Linux.

Medición del rendimiento mediante EventCounters

Tutorial: Medición del rendimiento mediante EventCounters en .NET muestra cómo usar la API para medir el EventCounter rendimiento en la aplicación .NET.

Escribir su propia herramienta de diagnóstico

La biblioteca cliente de diagnóstico le permite escribir su propia herramienta de diagnóstico personalizada más adecuada para su escenario de diagnóstico. Para obtener más información, consulte la referencia de la API Microsoft.Diagnostics.NETCore.Client.