Partager via


Exemple 9 : détection d’une fuite de mémoire de pool

L’exemple suivant utilise GFlags pour définir l’indicateur Activer l’étiquetage de pool à l’échelle du système dans le Registre. Ensuite, il utilise PoolMon (poolmon.exe), un outil du Kit de pilotes Windows, pour afficher la taille des pools de mémoire.

PoolMon surveille les octets dans les pools de mémoire paginés et non paginés et les trie par balise de pool. En exécutant régulièrement PoolMon, vous pouvez identifier les pools qui se développent en continu au fil du temps. Ce modèle indique souvent une fuite de mémoire.

Note Le balisage de pool est activé en permanence dans Windows Server 2003 et versions ultérieures de Windows. Sur ces systèmes, la zone Activer l’étiquetage de pool case activée de la boîte de dialogue Indicateurs globaux est grisée et les commandes permettant d’activer ou de désactiver l’étiquetage du pool échouent. Si l’étiquetage du pool n’est pas activé, PoolMon échoue et affiche le message suivant : « Échec de la requête pooltags c0000002 ».

Pour détecter une fuite de mémoire de pool

  1. Pour activer l’étiquetage de pool pour tous les processus dans les versions de Windows antérieures à Windows Server 2003, définissez l’indicateur Activer l’étiquetage de pool à l’échelle du système dans le Registre. La ligne de commande suivante utilise la méthode d’abréviation d’indicateur, mais vous pouvez identifier l’indicateur par sa valeur hexadécimale ou utiliser la boîte de dialogue Indicateurs globaux :

    gflags /r +ptg 
    
  2. Redémarrez l’ordinateur pour que la modification du Registre soit effective.

  3. Exécutez PoolMon régulièrement à l’aide de la commande suivante. Dans cette commande, le paramètre /b trie les pools dans l’ordre décroissant de taille.

    poolmon /b 
    

    En réponse, PoolMon affiche les allocations des pools de mémoire dans l’ordre décroissant de taille , y compris le nombre d’opérations d’allocation et d’opérations libres, ainsi que la quantité de mémoire restante dans le pool (dans la colonne Octets).

    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 la valeur dans la colonne Octets d’une allocation se développe en continu sans raison évidente, il peut y avoir une fuite de mémoire dans ce pool.

  4. Désactivez l’indicateur Activer l’étiquetage du pool .

    La ligne de commande suivante utilise la méthode d’abréviation d’indicateur, mais vous pouvez identifier l’indicateur par sa valeur hexadécimale ou utiliser la boîte de dialogue Indicateurs globaux :

    gflags /r -ptg 
    
  5. Redémarrez Windows pour que la modification du Registre soit effective.

Note Utilisez le symbole d’ajout (>>) pour rediriger la sortie PoolMon vers un fichier journal. Plus tard, vous pourrez examiner le fichier journal pour connaître les tendances de taille du pool. Par exemple :

poolmon.exe /b >> poolmon.log