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
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
Reinicie o computador para tornar a alteração do Registro eficaz.
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.
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
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