Windows 10 Uso de memória do driver alto [duplicado]

0

Nos últimos dias, tive que reiniciar meu PC algumas vezes por dia, porque estou ficando sem memória. Eu tenho 32GB DDR3 1866mhz ram.

Aqui está uma captura de tela do instantâneo de uso de memória do driver não-empacotado com poolmon classificado por bytes.

Alguma coisa parece anormal?

    
por Jonathan Beaudoin 21.02.2017 / 02:39

1 resposta

2

A "memória baixa", "memória insuficiente", etc., geralmente não tem nada a ver com a RAM livre, e sim com o limite de commit versus charge commit.

Seria útil ver um instantâneo de tela da guia Desempenho do Gerenciador de Tarefas, seção Memória, pois isso mostrará a carga e o limite de confirmação.

No entanto, duas coisas parecem anormais aqui, e eu suspeito que elas são suficientes para determinar a raiz do problema: você tem cerca de 21.000 objetos de processo ("Proc") e cerca de 23.000 objetos de thread ("Thre").

Para comparação: Meu sistema aqui, também o Windows 10, está ativo há cerca de 10 dias e tem apenas cerca de 200 e 3200 desses objetos, respectivamente.

Isso provavelmente indica que você tem algum programa em execução que está criando processos loucamente e não permitindo que eles saiam completamente, talvez por não fechar as alças para eles e / ou para seus threads. Embora eles não estejam impactando muito sua RAM agora (eles ocupam cerca de 100 MB de total de pool não paginado), se processos e encadeamentos continuarem a ser criados e não excluídos, eles eventualmente consumirão quase toda a sua RAM. A RAM comprometida com o pool não paginado contribui para o "commit charge", e é por isso que isso resultará em erros de "baixa memória" ou "falta de memória".

Uma maneira rápida de encontrar o culpado pode ser a guia Detalhes do Gerenciador de Tarefas. Adicione a coluna "Handles", classifique por essa coluna e veja se alguma coisa parece anormalmente alta e, particularmente, se está aumentando constantemente.

n.b .: A coluna "threads" provavelmente não será útil. Seria útil se você estivesse procurando por um processo com um monte de threads - o que não é uma coisa impossível de acontecer - mas o fato de existirem tantos processos quanto threads aqui argumenta contra isso. Com cada processo você recebe um thread (para começar), então uma praga de processos traz uma praga do mesmo número de threads com ele - mas isso não aparece no contador de "threads" de qualquer processo.

A visualização "árvore de processos" da ferramenta sysinternals Process Explorer pode, no entanto, ajudar. Você está procurando por um processo com muitos processos "sob".

Se isso não acontecer, tente usar a ferramenta Procmon do sysinternals e procure por eventos de criação de processo.

Se isso não o fizer, provavelmente está sendo feito em um driver de kernel. Use o Windows Performance Toolkit para localizar eventos de criação de processo.

Para mais informações sobre commit charge, veja minhas respostas às perguntas relacionadas abaixo. Normalmente, ficar sem taxa de commit é corrigido adicionando RAM ou aumentando o tamanho do arquivo de paginação (ou executando menos coisas de uma só vez), mas esses métodos não ajudarão com esse problema. O pool não paginado não pode ser paginado, portanto, esses objetos Proc e Thre necessariamente ocupam a RAM. E mesmo que o seu arquivo de paginação seja grande o suficiente para evitar ficar sem limite de commit, o sistema eventualmente mostrará outros problemas devido à falta de RAM utilizável.

O Windows diz que a RAM acabou enquanto ainda há 4 GB de memória física disponível

Como funciona a memória / commit charge no Windows 10?

    
por 21.02.2017 / 05:31