performance memory-leaks performancecounter perfmon memory-leak-detector

performance - Contadores Perfmon para comprobar la pérdida de memoria.



memory-leaks performancecounter (2)

Hay mejores herramientas disponibles para facilitar las pruebas de fugas de memoria, como RedGate ANTS Memory Profiler y JetBrains dotMemory Profiler .

Sin embargo, si desea usar los contadores de rendimiento, codeproject.com/Articles/42721/… explica cómo usar los contadores de rendimiento para probar las pérdidas de memoria.

Tenga en cuenta que la recolección de basura no libera memoria inmediatamente después de desechar una instancia. Se ha optimizado para activar y liberar memoria solo cuando hay un estrés de memoria. Por lo tanto, si desea probar las fugas de memoria, debe ejecutar la recolección de basura manualmente antes de tomar las lecturas del contador.

GC.Collect(); GC.WaitForPendingFinalizers();

Quiero verificar el problema de pérdida de memoria en mi servicio. He intentado siguiente conjunto de contadores de perfmon.

  1. .NET CLR Memory / # Bytes en todos los montones
  2. .NET CLR Memory / Gen 2 Heap Size
  3. .NET CLR Memory / # GC se encarga
  4. .NET CLR Memory / # de objetos anclados
  5. .NET CLR Memory / # total de bytes confirmados
  6. .NET CLR Memory / # total de bytes reservados
  7. Memoria .NET CLR / Tamaño de montón de objeto grande

He referido el conjunto anterior de here

También se refiere el siguiente conjunto:

  1. Memoria / Bytes Disponibles
  2. Memoria / bytes comprometidos
  3. Procesos / Bytes privados
  4. Procesos / bytes de archivo de página
  5. Recuento de procesos / manijas

He referido el conjunto anterior de here

¿Hay algún parámetro / criterio o alguna otra mejor manera de identificar el contador de perfmon para la pérdida de memoria?
¿Puede alguien sugerirme un conjunto de contadores para verificar la pérdida de memoria? ¿O encima de conjuntos cubre la pérdida de memoria?


Para detectar una pérdida de memoria utilizando el Monitor de rendimiento, supervise estos contadores:

  1. El contador Memoria / Bytes disponibles le permite ver el número total de bytes de memoria disponible. Este valor normalmente fluctúa, pero si tiene una aplicación con la pérdida de memoria, disminuirá con el tiempo.
  2. El contador de memoria / bytes confirmados aumentará constantemente si se produce una pérdida de memoria, ya que a medida que aumenta el número de bytes disponibles de memoria, aumenta el número de bytes confirmados.
  3. El contador Procesos / Bytes privados muestra el número de bytes reservados exclusivamente para un proceso específico. Si se produce una pérdida de memoria, este valor tenderá a aumentar constantemente.
  4. El contador de bytes del archivo de proceso / página muestra el tamaño del archivo de paginación. Windows usa la memoria virtual (el archivo de paginación) para complementar la memoria física de una máquina. Cuando la memoria física de una máquina comienza a llenarse, las páginas de la memoria se mueven al archivo de paginación. Es normal que el archivo de paginación se use incluso en máquinas con mucha memoria. Pero si el tamaño del archivo de paginación aumenta constantemente, es una buena señal de que se está produciendo una pérdida de memoria.
  5. También quiero mencionar el contador Proceso / Manejar. Las aplicaciones usan identificadores para identificar los recursos a los que deben acceder. Si se está produciendo una pérdida de memoria, una aplicación a menudo creará controladores adicionales para identificar los recursos de memoria. Por lo tanto, un aumento en el número de identificadores podría indicar una pérdida de memoria. Sin embargo, no todas las fugas de memoria provocarán un aumento en el conteo de identificadores.

Source

En mi experiencia esto es correcto.

También me referiría a este blog de depuración avanzada de Microsoft por Tess, un empleado de Microsoft. Quien sugiere los siguientes contadores. Descubrí que lo anterior es más que suficiente para indicar que hay una pérdida de memoria, pero confío en que las instrucciones de Tess podrían proporcionar una visión más profunda del problema.

Debugging Demos - Revisión de memoria

  • .NET CLR Memory / # Bytes en todos los montones
  • Memoria .NET CLR / Tamaño de montón de objeto grande
  • Tamaño de la pila .NET CLR Memory / Gen 2
  • Tamaño de la pila .NET CLR Memory / Gen 1
  • Tamaño de la pila .NET CLR Memory / Gen 0
  • Procesos / Bytes privados
  • Procesos / bytes virtuales