Monitor indicador de rendimiento EventCounters imprescindible de .NET

En .NET, en realidad tenemos dos métodos comunes para el monitoreo de indicadores de rendimiento, uno es la herramienta CLI dotnet-countersy el otro es a nivel de código EventListener.

Utilice contadores de dotnet

dotnet-countersEs una herramienta de monitoreo de indicadores de desempeño para el monitoreo temporal del estado de la operación y la investigación preliminar del desempeño. Puede observar el valor del contador de rendimiento publicado a través de la API de EventCounter . Por ejemplo, puede conducir rápidamente a un uso anormal de la CPU del monitor de velocidad o la aplicación .NET Core, para comprender el uso PerfViewo dotnet-tracesi hay acciones sospechosas antes de una investigación exhaustiva de problemas de rendimiento más graves.

- de contadores de dotnet

mando


Para instalar la herramienta CLI dotnet-counters, puede utilizar el siguiente comando:

dotnet tool install --global dotnet-counters

El comando de actualización es el siguiente:

dotnet tool update dotnet-counters --global

Después de instalar la herramienta, podemos ver los procesos que se pueden monitorear:

dotnet-counters ps
     12268 dotnet C:\Program Files\dotnet\dotnet.exe
     16324 dotnet C:\Program Files\dotnet\dotnet.exe

Luego de obtener el ID del proceso, podemos monitorearlo con el siguiente comando:

dotnet-counters monitor -p 12268

Para supervisar específicos EventSources, puede proporcionar una lista separada por un espacio EventSources, como se muestra a continuación:

dotnet-counters monitor -p 12268 System.Runtime MyEventSource

Por defecto, cuando EventSourcemonitoreamos, captura todos los contadores. Si queremos rastrear ciertos contadores individualmente, podemos especificarlos de la siguiente manera:

dotnet-counters monitor -p 12268 System.Runtime[cpu-usage,gc-heap-size]

Para el monitor, podemos configurar la frecuencia de actualización, que se puede configurar mediante --refresh-intervalparámetros:

dotnet-counters monitor -p 12268  --refresh-interval 3   System.Runtime[cpu-usage,gc-heap-size]

EventCounters en el código

EventListenerProporciona una forma de suscribirse y consumir eventos de registro en proceso (En proceso) y EventListenerpuede recibir EventSourceeventos de registro de la distribución. Estos eventos cubren el comportamiento de GC, JIT, ThreadPool e interoperabilidad.

创建EventListener

在下面我们进行重写OnEventSourceCreated方法,该方法会在调用时接收一个EventSource对象,我们可以通过EventSource对象的Name属性去筛选我们感兴趣的日志事件,筛选后我们需要显示的调用EnableEvents方法向感兴趣的日志事件发起订阅。

internal sealed class MyEventListener : EventListener
    {
        protected override void OnEventSourceCreated(EventSource eventSource)
        {
            if (eventSource.Name.Equals("Microsoft-Windows-DotNETRuntime"))
            {
                EnableEvents(eventSource, EventLevel.Verbose, (EventKeywords)(-1));
            }
        }
    }

事件消费

接下来我们需要进行重写OnEventWritten,关于日志事件相关的信息会被封装成一个EventWrittenEventArgs对象,我们不仅可以通过它获取当前日志事件的所有信息,而且我们还可以进行获取到EventSource对象。Payload包含了不同属性的值ReadOnlyCollection<object>, 而PayLoadNames ReadOnlyCollection<object>中包含了不同的属性名称,我们现在可以通过如下方式进行获取这些属性:

protected override void OnEventWritten(EventWrittenEventArgs eventData)
        {
            Console.WriteLine($"ThreadID = {eventData.OSThreadId} ID = {eventData.EventId} Name = {eventData.EventName}");
            for (int i = 0; i < eventData.Payload.Count; i++)
            {
                string payloadString = eventData.Payload[i]?.ToString() ?? string.Empty;
                Console.WriteLine($"\tName = \"{eventData.PayloadNames[i]}\" Value = \"{payloadString}\"");
            }
            Console.WriteLine("\n");
        }

参考

https://stackoverflow.com/questions/61081063/get-total-number-of-allocations-in-c-sharp

Supongo que te gusta

Origin blog.csdn.net/qq_27843785/article/details/109699742
Recomendado
Clasificación