Ejemplo 9: Detección de una fuga de memoria del grupo
En el ejemplo siguiente se usa GFlags para establecer la marca de etiquetado de grupos Enable pool en todo el sistema en el Registro. A continuación, usa PoolMon (poolmon.exe), una herramienta del Kit de controladores de Windows, para mostrar el tamaño de los grupos de memoria.
PoolMon supervisa los bytes de los grupos de memoria paginados y no paginados y los ordena por etiqueta de grupo. Al ejecutar PoolMon periódicamente, puede identificar grupos que se expanden continuamente con el tiempo. Este patrón suele indicar una pérdida de memoria.
Nota El etiquetado de grupos está habilitado permanentemente en Windows Server 2003 y versiones posteriores de Windows. En estos sistemas, la casilla Habilitar etiquetado de grupos en el cuadro de diálogo Marcas globales está atenuada y los comandos para habilitar o deshabilitar el etiquetado de grupos producen un error. Si el etiquetado de grupos no está habilitado, PoolMon produce un error y muestra el siguiente mensaje: "Error de pooltags de consulta c0000002".
Para detectar una pérdida de memoria del grupo
Para habilitar el etiquetado de grupos para todos los procesos en versiones de Windows anteriores a Windows Server 2003, establezca la marca de etiquetado habilitar grupo en todo el sistema en el Registro. La siguiente línea de comandos usa el método de abreviatura de marca, pero puede identificar la marca por su valor hexadecimal o usar el cuadro de diálogo Marcas globales :
gflags /r +ptg
Reinicie el equipo para que el registro cambie en vigor.
Ejecute PoolMon periódicamente mediante el siguiente comando. En este comando, el parámetro /b ordena los grupos en orden descendente de tamaño.
poolmon /b
En respuesta, PoolMon muestra las asignaciones de los grupos de memoria en orden descendente de tamaño, incluido el número de operaciones de asignación y las operaciones libres, y la cantidad de memoria restante en el grupo (en la columna Bytes).
Memory: 16224K Avail: 4564K PageFlts: 31 InRam Krnl: 684K P: 680K Commit: 24140K Limit: 24952K Peak: 24932K Pool N: 744K P: 2180K Tag Type Allocs Frees Diff Bytes Per Alloc ----------------------------------------------------------------------- CM Paged 1283 ( 0) 1002 ( 0) 281 1377312 ( 0) 4901 Strg Paged 10385 ( 10) 6658 ( 4) 3727 317952 ( 512) 85 Fat Paged 6662 ( 8) 4971 ( 6) 1691 174560 ( 128) 103 MmSt Paged 614 ( 0) 441 ( 0) 173 83456 ( 0) 482
Si el valor de la columna Bytes de una asignación se expande continuamente por ningún motivo obvio, podría haber una fuga de memoria en ese grupo.
Desactive la marca Habilitar etiquetado del grupo .
La siguiente línea de comandos usa el método de abreviatura de marca, pero puede identificar la marca por su valor hexadecimal o usar el cuadro de diálogo Marcas globales :
gflags /r -ptg
Reinicie Windows para que el registro cambie en vigor.
Nota Use el símbolo append (>>) para redirigir la salida poolMon a un archivo de registro. Más adelante, puede examinar el archivo de registro para las tendencias de tamaño del grupo. Por ejemplo:
poolmon.exe /b >> poolmon.log