Compartilhar via


Exemplo 9: detectando um vazamento de memória do pool

O exemplo a seguir usa GFlags para definir o sinalizador habilitar marcação de pool em todo o sistema no registro. Em seguida, ele usa o PoolMon (poolmon.exe), uma ferramenta no Kit de Driver do Windows, para exibir o tamanho dos pools de memória.

O PoolMon monitora os bytes nos pools de memória paginados e nãopagados e os classifica por marca de pool. Executando o PoolMon periodicamente, você pode identificar pools que se expandem continuamente ao longo do tempo. Esse padrão geralmente indica uma perda de memória.

Nota A marcação de pool está permanentemente habilitada no Windows Server 2003 e em versões posteriores do Windows. Nesses sistemas, a caixa Habilitar marcação de pool marcar na caixa de diálogo Sinalizadores Globais está esmaecida e os comandos para habilitar ou desabilitar a marcação do pool falham. Se a marcação do pool não estiver habilitada, o PoolMon falhará e exibirá a seguinte mensagem: "Pooltags de consulta falharam c0000002".

Para detectar uma perda de memória do pool

  1. Para habilitar a marcação de pool para todos os processos em versões do Windows anteriores ao Windows Server 2003, defina o sinalizador Habilitar marcação de pool em todo o sistema no Registro. A linha de comando a seguir usa o método de abreviação de sinalizador, mas você pode identificar o sinalizador pelo valor hexadecimal ou usar a caixa de diálogo Sinalizadores Globais :

    gflags /r +ptg 
    
  2. Reinicie o computador para tornar a alteração do Registro eficaz.

  3. Execute PoolMon periodicamente usando o comando a seguir. Nesse comando, o parâmetro /b classifica os pools em ordem de tamanho decrescente.

    poolmon /b 
    

    Em resposta, o PoolMon exibe alocações dos pools de memória em ordem de tamanho decrescente, incluindo o número de operações de alocação e operações livres e a quantidade de memória restante no pool (na coluna 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
    

    Se o valor na coluna Bytes de uma alocação for expandido continuamente sem motivo óbvio, poderá haver um vazamento de memória nesse pool.

  4. Desmarque o sinalizador Habilitar marcação de pool .

    A linha de comando a seguir usa o método de abreviação de sinalizador, mas você pode identificar o sinalizador pelo valor hexadecimal ou usar a caixa de diálogo Sinalizadores Globais :

    gflags /r -ptg 
    
  5. Reinicie o Windows para tornar a alteração do Registro eficaz.

Nota Use o símbolo de acréscimo (>>) para redirecionar a saída poolMon para um arquivo de log. Posteriormente, você pode examinar o arquivo de log quanto às tendências de tamanho do pool. Por exemplo:

poolmon.exe /b >> poolmon.log