Por que o uso total de RAM do Monitor de Recursos e do Gerenciador de Tarefas nem sequer remotamente se soma ao uso total de Memória Física? [duplicado]

21

Tenho notado isso em muitas máquinas diferentes do Windows, em muitas ocasiões diferentes: o uso de RAM relatado pelo Gerenciador de Tarefas ou pelo Monitor de Recursos muitas vezes parece se somar a um valor significativamente menor do que o real quantidade em uso.

Por exemplo, muitas vezes no meu laptop ou na minha área de trabalho, eu vi algo como 7GB em uso, e ainda assim o total do Working RAM Set é mais parecido com 3GB. Eu simplesmente não consigo descobrir onde está sendo usado!

Aqui está um exemplo extremo que notei hoje no Monitor de Recursos em um servidor:


Cliqueparaaumentarotamanho

Sevocêclicarcomobotãodireitodomousenaimagemeabriremumanovaguiaevisualizarosnúmeros,perceberáqueoconjuntodetrabalho(quenãoincluimemóriavirtualnãofísica)somacercade1,7GB.EurecebonúmerossemelhantesadicionandoousodeRAMnoGerenciadordeTarefasquando"Mostrar processos de todos os usuários" está habilitado.

Agora, aqui está uma captura de tela da guia "Desempenho" do gerenciador de tarefas:


Cliqueparaaumentarotamanho

Istodizque7.6GBdememóriafísicaestáemuso.

Euvejoissootempotodo,emcomputadorespessoais,laptopseagoraemservidores:ousototaldeRAMrelatadopelasferramentasdosistemarepresentaapenascercade1/4dousodeRAMqueobservo.WTFestáacontecendo???

ExistealgumaexplicaçãosatisfatóriadeondetodaaminhamemóriaRAMestá?Oqueestádevorandoeporquenãoestádeixandovestígios?

EDIT:AquiestáumaimagemdousográficodaRAM,comoousuáriopediu:


Cliqueparaaumentarotamanho

EDIT2:EmrespostaàrespostadeJames,aquiestáumaimagemdosprocessosnãopaginadosempoolmon.exe,classificadosportamanho:

Estes resultados me confundem. poolmon afirma corretamente que eu tenho 6 GB de pool não paginado em uso, mas todos os processos de pool não paginado têm menos de 8 MB de tamanho.

O que isso poderia significar? A poolmon não consegue detectar alguns dos processos usando o pool não paginado?

    
por DumpsterDoofus 25.04.2015 / 23:46

1 resposta

22

Me desculpe, eu sei que isso soa como uma resposta irreverente ... mas a resposta para a pergunta em seu título é "porque eles não deveriam".

Ou, para ser mais educado: há muito uso de RAM que não está nos conjuntos de trabalho privados dos processos. Algumas delas estão nos conjuntos de trabalho compartilhados dos processos - mas você não pode ter uma noção confiável do uso real, devido ao compartilhamento; Somando os números dos processos, você terá um resultado muito grande.

Outras coisas que ocupam RAM, como o pool não paginado, a parte residente do pool paginável e as partes residentes de outros usos do espaço do kernel, não são exibidas na exibição "processos" do Gerenciador de Tarefas.

Em relação ao seu problema específico:

Na tela do Gerenciador de Tarefas, veja a seção "memória do kernel"? Você tem 6 GB de "memória não-paginável" (que é pool não paginado). Isso faz parte da seção "Em uso" no seu segundo gráfico. O pool não paginado não é cobrado em nenhum processo, e é por isso que a soma dos números por processo no gerenciador de tarefas não chega perto do total em uso. Algum driver provavelmente está usando. Esta é uma quantia totalmente excessiva; deve estar bem abaixo de 1 GB. Qualquer que seja o driver responsável pela parte excessiva do uso do pool não paginado, é inquestionavelmente problemático.

O RAMmap pode confirmar isso (na guia "Use Counts", veja o total de "Nonpaged Pool"), mas não pode ajudá-lo a descobrir qual driver está causando isso.

Veja como encontrá-lo: Obtenha uma cópia da ferramenta Microsoft "poolmon". É uma ferramenta de modo de caracteres (menino, é sempre) distribuída com o Windows Driver Kit. Para o Windows 7, o WDK é um download gratuito . Você tem que baixar a coisa toda (é um ISO) e instalá-lo, mas você pode optar por instalar apenas as ferramentas, se é isso que você quer.

Encontre o poolmon nos diretórios do WDK - certifique-se de selecionar o correto, 32 ou 64 bits - e execute-o a partir de um prompt de comando do administrador. Você receberá uma exibição assim:

Agora,pressioneatecla"p" (não, não estou brincando. Nenhum menu aqui!) até que a coluna "Tipo" mostre apenas "Nonp". Em seguida, pressione "b" (duas vezes, se necessário) para classificar a exibição em ordem decrescente pela coluna Bytes (que já foi feita na amostra aqui).

Em seguida, observe a coluna "Tag" na linha superior. No caso (obviamente artificial) mostrado aqui é "Vazamento". (Este sistema está executando um driver que foi deliberadamente bugado para causar esse problema - está "vazando" pool não-paginável.)

btw, as linhas destacadas são as que mudaram desde a atualização anterior para essa tela arcaica.

Agora, pesquise c: \ Windows \ System32 \ Drivers por um arquivo .sys contendo essa string. Nesse caso, você estaria procurando por "vazamento", assim:

c:\windows\system32> findstr /s Leak *.sys

Em seguida, pesquise na web por referências a essa string e / ou esse nome de driver.

Retornar aqui e informar o nome completo, nome do fabricante etc. do arquivo .sys também seria útil.

(Minha aposta é que a tag que você encontrar será ECMC, o driver é intmsd.sys e está associado a um produto chamado ExpressCache ou IntelliMemory. Eu "desinstalo" esse produto. Há uma atualização para corrigir o problema , mas mesmo com a versão fixa eu nunca vi o desempenho de um sistema melhorado por este produto, essencialmente duplica a funcionalidade que já está no Windows.)

Se você não conseguir encontrá-lo dessa maneira, a próxima etapa é usar o "Windows Performance Toolkit". Procure neste fórum por essa string, com respostas de magicandre1981, para um how-to. Ignore as respostas que mencionam o xperf - é uma versão antiga da ferramenta.

    
por 26.04.2015 / 05:36