Compartilhar via


Solucionando problemas de um vazamento de pool paginável no Windows

**Sistemas operacionais

**

Windows server 2008,

Windows Server 2008 R2,

Windows server 2003,

Windows server 2003 R2

 

**Problema

**

Aqui irá corrigir um vazamento de pool paginado real em seu sistema para que podemos colocar para usar as técnicas para rastrear o vazamento.

 

**Solução

**

Quando um programa precisa armazenar algumas informações temporárias durante a execução, ele pode solicitar dinamicamente um bloco de memória do sistema. No entanto, o sistema possui uma quantidade fixa de memória total disponível. Se um aplicativo usa tudo de memória livre do sistema, outros aplicativos não poderá obter a memória de que necessitam. As implicações de um aplicativo "memória de fome" podem variar de um desligamento normal a um acidente inesperado. A maioria dos aplicativos de grande escala regularmente solicitação de memória, assim esgotar a memória do sistema tende a ter um efeito dominó.Mesmo que as aplicações não terminar, o sistema vai abrandar para um rastreamento — ou até mesmo pendurar — em condições de pouca memória. Claramente, nenhum destes resultados são desejáveis, então o sistema nunca quer correr para fora — ou executar baixo — de memória.

 

É responsabilidade de cada aplicativo para "livre" memória dinamicamente solicitada quando tiverem terminados de usá-lo. Liberar a memória retorna ao sistema, onde pode ser re–allocated para outro aplicativo, quando necessário. Quando um aplicativo dinamicamente aloca memória e não essa memória livre quando ele for concluído usando-o, esse programa tem um vazamento de memória. A memória não está sendo usada pelo aplicativo de mais, mas não pode ser usado pelo sistema ou qualquer outro programa.

 

Vazamentos de memória se somam ao longo do tempo, e se eles não são limpos, o sistema executa eventualmente fora da memória. A maioria de todos tem visto a caixa de mensagem "seu computador está funcionando baixo de memória virtual" no Windows, quando a memória fica muito alta. É geralmente acompanhada de tempo de resposta terrivelmente lento, e muitas vezes o usuário ainda não pode fechar o aplicativo desperdício por causa desta lentidão. Nesse ponto, a única resposta é reiniciar o computador.

 

Vazamentos de memória são ruins em qualquer sistema. Para a plataforma automotiva, no entanto, eles se tornam muito mais de um problema significativo. Isto é devido ao seguinte:

 

Aplicações de permanecer na memória quando não em uso. Normalmente, o sistema operacional pode limpar após um programa que vazamentos de memória depois que ele termina. No entanto, desde que não permitimos que os usuários facilmente desligar aplicações automotivas, Windows CE não pode limpar após quaisquer aplicações de ill–behaved.

Sistema Run é esperado para ser ilimitado. Se tudo mais falhar, uma reinicialização do sistema irá limpar todos os vazamentos de memória. No entanto, embora façamos reinicializações do sistema de apoio, nosso objetivo é que o usuário nunca precise fazê-lo. Desde que você não precisa de "recarregar" seu estéreo do carro cada poucas semanas porque ele pára de funcionar, ou porque o desempenho torna-se pobre, é inaceitável a necessidade de fazê-lo em plataforma automotiva.

Sistemas geralmente têm baixa memória de sistema total disponível. Aplicações desktop podem começar afastado com sendo desleixado com memória quando eles são executados em sistemas com 64 megabytes de memória RAM e muito mais e com grandes unidades de disco rígido para armazenar trocadas páginas de memória virtual. Mas a plataforma do automóvel pode ter apenas 16 megabytes de memória total, e isso inclui o processo e armazenamento de memória juntos! Na ordem de palavras, que a memória deve armazenar o que seria na RAM em um PC desktop, bem como o que seria no disco rígido.

** **

** **

Paginado e não paginadas piscinas servem como os recursos de memória do sistema operacional e drivers de dispositivo usam para armazenar suas estruturas de dados. O Gerenciador de pool opera em modo kernel, usando regiões do espaço de endereço virtual do sistema (descrito no empurrando os limites post sobre memória virtual) para a memória-sub-allocates. Gerenciador de pool do kernel funciona da mesma forma para os gerentes de heap C runtime e Windows que são executados nos processos de modo de usuário. Porque o tamanho de alocação de memória virtual mínima é um múltiplo do tamanho de página do sistema (4 KB x 86 e x 64), esses gerenciadores de memória subsidiária dividir alocações maiores em menores para que a memória não é desperdiçada.

 

Chegando a nossa experiência, estamos acostumados número de utilitários para testar problemas de vazamento de memória.

 

Recursos utilizados:

 

 

Exceto o Gerenciador de tarefas todos os utilitários são baixados da Microsoft Sysinternals.

Baixar simplesmente mantenha pressionado a tecla Ctrl e selecione o item.

 

O vazamento será gerado pela ferramenta da Sysinternals NotMyFault.

Quando rodamos NotMyFault.exe, ele carrega o driver de dispositivo Myfault.sys e apresenta a seguinte caixa de diálogo

 

https://bay002.mail.live.com/att/GetInline.aspx?messageid=11d431fd-1f63-11e2-b98a-00237de3eda4&attindex=0&cp=-1&attdepth=0&imgsrc=cid%3aimage001.jpg%4001CDB39D.B8B269B0&cid=f3b107ca2c44bfc9&shared=1&blob=MHxpbWFnZTAwMS5qcGd8aW1hZ2UvanBlZw_3d_3d&hm__login=jinishkg&hm__domain=hotmail.com&ip=10.111.82.8&d=d3413&mf=0&hm__ts=Fri%2c%2026%20Oct%202012%2011%3a51%3a25%20GMT&st=jinishkg&hm__ha=01_78563d96eea662e65581d04b9999503145e99d473b366a7e40d4b39887baa5e9&oneredir=1

https://bay002.mail.live.com/att/GetInline.aspx?messageid=11d431fd-1f63-11e2-b98a-00237de3eda4&attindex=1&cp=-1&attdepth=1&imgsrc=cid%3aimage002.jpg%4001CDB39D.B8B269B0&cid=f3b107ca2c44bfc9&shared=1&blob=MXxpbWFnZTAwMi5qcGd8aW1hZ2UvanBlZw_3d_3d&hm__login=jinishkg&hm__domain=hotmail.com&ip=10.111.82.8&d=d3413&mf=0&hm__ts=Fri%2c%2026%20Oct%202012%2011%3a51%3a25%20GMT&st=jinishkg&hm__ha=01_30e8b2155dc3d1f494b156ad7bc3690d9de5544315b09d154c29d2d2613f3c83&oneredir=1

 

Clique no botão de vazamento paginada. Isso faz com que NotMyFault começar a enviar solicitações para o driver de dispositivo Myfault para alocar o pool paginado. (Não clique no botão fazer Bug ou você vai experimentar uma falha no sistema; este botão é usado todemonstrate vários tipos de falhas.)

 

NotMyFault continuará enviando solicitações até que você clique no botão parar paginada. Observe que pool paginável não é normalmente liberada mesmo quando você fechar um programa que tenha causado a ocorrer (interagindo com um driver de dispositivo com bugs); a piscina é vazada permanentemente até que você reiniciar o sistema. No entanto, para tornar o teste mais fácil, o driver de dispositivo Myfault detecta que o processo foi encerrado e libera suas alocações.

 

Enquanto a piscina está vazando, primeiro abra o Gerenciador de tarefas e clique na guia desempenho. Você deve observar a memória do Kernel (MB): Paged escalada.

 

 

 

 

 

https://bay002.mail.live.com/att/GetInline.aspx?messageid=11d431fd-1f63-11e2-b98a-00237de3eda4&attindex=2&cp=-1&attdepth=2&imgsrc=cid%3aimage003.jpg%4001CDB39D.B8B269B0&cid=f3b107ca2c44bfc9&shared=1&blob=MnxpbWFnZTAwMy5qcGd8aW1hZ2UvanBlZw_3d_3d&hm__login=jinishkg&hm__domain=hotmail.com&ip=10.111.82.8&d=d3413&mf=0&hm__ts=Fri%2c%2026%20Oct%202012%2011%3a51%3a25%20GMT&st=jinishkg&hm__ha=01_94b258c5add0e9c97d4a4464323c2023343041d3de20c2e2fa09bfe7ea454fb2&oneredir=1

 

 

Você também pode verificar isso com display de informações do sistema do processo Explorer. (Clique em Exibir e, em seguida, informações do sistema.)

 

 

https://bay002.mail.live.com/att/GetInline.aspx?messageid=11d431fd-1f63-11e2-b98a-00237de3eda4&attindex=3&cp=-1&attdepth=3&imgsrc=cid%3aimage004.jpg%4001CDB39D.B8B269B0&cid=f3b107ca2c44bfc9&shared=1&blob=M3xpbWFnZTAwNC5qcGd8aW1hZ2UvanBlZw_3d_3d&hm__login=jinishkg&hm__domain=hotmail.com&ip=10.111.82.8&d=d3413&mf=0&hm__ts=Fri%2c%2026%20Oct%202012%2011%3a51%3a25%20GMT&st=jinishkg&hm__ha=01_1e36d47e5130950c5098fb681f256f9e0ed95c461b67025cb530e197034aaed2&oneredir=1

 

Para determinar a marca de pool que está vazando, executar Poolmon e pressione a tecla B para ordenar pelo número de bytes.

 

https://bay002.mail.live.com/att/GetInline.aspx?messageid=11d431fd-1f63-11e2-b98a-00237de3eda4&attindex=4&cp=-1&attdepth=4&imgsrc=cid%3aimage005.jpg%4001CDB39D.B8B269B0&cid=f3b107ca2c44bfc9&shared=1&blob=NHxpbWFnZTAwNS5qcGd8aW1hZ2UvanBlZw_3d_3d&hm__login=jinishkg&hm__domain=hotmail.com&ip=10.111.82.8&d=d3413&mf=0&hm__ts=Fri%2c%2026%20Oct%202012%2011%3a51%3a25%20GMT&st=jinishkg&hm__ha=01_cdab8526b77ad37cd8b5a35169d116adfffc309043db04f2fbe68fc46672fcc7&oneredir=1

Pressione P duas vezes para que o Poolmon está mostrando apenas paginável. Você deve observar a marca pool "Vazamento" subir ao topo da lista. (Poolmon mostra alterações para alocações de pool, destacando as linhas que mudar.)

 

https://bay002.mail.live.com/att/GetInline.aspx?messageid=11d431fd-1f63-11e2-b98a-00237de3eda4&attindex=5&cp=-1&attdepth=5&imgsrc=cid%3aimage006.jpg%4001CDB39D.B8B269B0&cid=f3b107ca2c44bfc9&shared=1&blob=NXxpbWFnZTAwNi5qcGd8aW1hZ2UvanBlZw_3d_3d&hm__login=jinishkg&hm__domain=hotmail.com&ip=10.111.82.8&d=d3413&mf=0&hm__ts=Fri%2c%2026%20Oct%202012%2011%3a51%3a25%20GMT&st=jinishkg&hm__ha=01_553e24afd87f48375d07f25ca55f2c6cf154c44f63de463da609c09c88443547&oneredir=1

 

Agora pressione o botão parar paginada para que não escape pool paginado em seu sistema.

 

Execute seqüências (da Sysinternals) para olhar para binários de motorista que contenham a marca pool "Vazamento":

 

*Cordas %SystemRoot%\system32\drivers\.sys | Findstr vazamento

*

 

https://bay002.mail.live.com/att/GetInline.aspx?messageid=11d431fd-1f63-11e2-b98a-00237de3eda4&attindex=6&cp=-1&attdepth=6&imgsrc=cid%3aimage007.jpg%4001CDB39D.B8B269B0&cid=f3b107ca2c44bfc9&shared=1&blob=NnxpbWFnZTAwNy5qcGd8aW1hZ2UvanBlZw_3d_3d&hm__login=jinishkg&hm__domain=hotmail.com&ip=10.111.82.8&d=d3413&mf=0&hm__ts=Fri%2c%2026%20Oct%202012%2011%3a51%3a25%20GMT&st=jinishkg&hm__ha=01_aa1ab2475258784fa79800d9942f703ff66628b4fd1730111096cf8e57a70be0&oneredir=1

 

Isso deve exibir uma correspondência no arquivo Myfault.sys, confirmando-o assim como o driver usando a marca de pool "Vazamento".

Uma vez que tinha identificado o driver de dispositivo, poderíamos identificar o fabricante e trabalhar para a resolução...

Vale a pena tendo em mente que a mesma técnica também pode ser usada para solucionar problemas paginável problemas de piscina também.