Procdump para detectar problemas de alto consumo de CPU

por Elwyn Pryce

Usando ProcDump.exe para detectar picos de CPU en w3wp.exe

Procdump es una herramienta de Sysinternal que se utiliza en línea de comando con el simple propósito de detectar picos de utilización de CPU en una aplicación, y generar un volcado de memoria (dump) durante este pico. Dicha información puede ser utilizada por personal de soporte, para un análisis más exhaustivo. Procdump también puede ser ejecutado desde scripts a efectos de automatización.

Procdump elimina la necesidad de instalar herramientas tales como DebugDiag 1.1 para procesos de 32bit y adplus para procesos de 64bit en el mismo servidor.

Problema

Supongamos que estamos observando problemas de rendimiento en nuestra aplicación web. Al abrir el administrador de tareas (Task Manager), observamos que el proceso w3wp.exe muestra lapsos de utilización de CPU del 49%- 80% intermitentemente.

Para poder identificar la causa de alto consumo en esos momentos, necesitamos tomar 3 capturas del proceso cuando el CPU esta sobre el 50% de utilización y cuando este nivel se mantiene por más de 3 segundos consecutivos.

Implementar esta captura utilizando herramientas como DebugDiag 1.1 o Adplus es una tarea difícil, ya que requiere la observación y ejecución manual de la herramienta para crear el dump en el momento en que ocurre este evento. Esta práctica puede resultar en que la captura manual no contienen la actividad responsable del alto consumo de CPU.

Solución usando Procdump

ProcDump.exeresulta de gran beneficio en dichas situaciones ya que reduce los pasos a tomar y ayuda a tomar la información más relevante. Procdump monitorea el proceso esperando por umbrales predeterminados y tomando el volcado de memoria cuando estos umbrales se cumplen.

Por ejemplo:

procdump -ma -c 50 -s 3 -n 3 5844(Process Name or PID)

-ma escribe el dump con toda la informacion en la memoria del proceso. La configuración por omisión incluye los detalles de threads y handles.

-c Umbral de CPU luego del cual se va a tomar el volcado de memoria.
-s Segundos consecutivos durante el umbral debe mantenerse antes de disparar el volcado de memoria (por omisión es 10 seg.)
-n Número de volcados que se desea escribir.

El comando comando de arriba hace lo siguiente:

  1. Monitorea el proceso con el ID 5844 (por ejemplo el ID de w3wp.exe) hasta que la utilización del CPU llegue a 50%
  2. verifica que este umbral se mantenga por 3 segundos consecutivos
  3. y luego genera 3 volcados de memoria en dos instantes (tiempos) diferentes.

Ejemplo de ejecución (supongamos que el process ID de w3wp.exe es 5844):

C:\>procdump -ma -c 50 -s 3 -n 2 5844

ProcDump v1.1 - Writes process dump files
Copyright (C) 2009 Mark Russinovich
Sysinternals - www.sysinternals.com
Process: w3wp.exe (5844)
CPU threshold: 50% of system
Duration threshold: 3s
Number of dumps: 2
Hung window check: Disabled
Exception monitor: Disabled
Dump file: C:\Users\jaskis\Downloads\procdump\w3wp.dmp

Time CPU Duration
[23:48.35] 59% 1s
[23:48.36] CPU usage below threshold.
[23:48.37] 54% 1s
[23:48.38 ] 55% 2s
[23:48.39] 61% 3s
Process has hit spike threshold.
Writing dump file C:\Downloads\procdump\w3wp_080309_114839PM.dmp... Dump written.

[23:48.44] 61% 1s
[23:48.45]

59% 2s
[23:48.46]

57% 3s Process has hit spike threshold. Writing dump file C:\Downloads\procdump\w3wp_080309_114846PM.dmp... Dump written.

Opciones adicionales:

Es posible ejecutar procdump sin opciones de umbral y generará un dump del proceso inmediatamente.

Como es esperado la ejecución de procdump con /? proporciona una lista completa de opciones:

usage: procdump [-64] [-c CPU usage [-u] [-s seconds] [-n exceeds]] [-h] [-e] [t] [-ma] [-r] [-o] [[<process name or PID> [dump file]] | [-x <image file> <dumpfile> [arguments]]
-64 By default Procdump will capture a 32-bit dump of a 32-bit process when running on 64-bit Windows. This option overrides to create a 64-bit dump.

-c CPU threshold at which to create a dump of the process.
-e Write a dump when the process encounters an unhandled exception.
-h Write dump if process has a hung window.
-ma Write a dump file with all process memory. The default
dump format includes thread and handle information.
-n Number of dumps to write before exiting.
-o Overwrite an existing dump file.
-r Reflect (clone) the process for the dump to minimize the time
the process is suspended (Windows 7 and higher only).
-s Consecutive seconds CPU threshold must be hit before dump is
written (default is 10).
-t Write a dump when the process terminates.
-u Treat CPU usage relative to a single core.
-x Launch the specified image with optional arguments.

Use the -accepteula command line option to automatically accept the
Sysinternals license agreement.

To just create a dump of a running process, omit the CPU threshold. If
you omit the dump file name, it defaults to <processname>.dmp.

Referencia

Using ProcDump.exe to monitor w3wp.exe for CPU spikes by jaskis