Compartir a través de


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

  1. 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 
    
  2. Reinicie el equipo para que el registro cambie en vigor.

  3. 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.

  4. 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 
    
  5. 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