Avisos de pouca memória do Windows 10 quando tenho muita memória disponível


25

Estou com um problema em que, se meu sistema estiver em funcionamento por alguns dias sem ser reinicializado, começarei a receber avisos dizendo "Fechar programas para evitar a perda de informações" e, em seguida, um diálogo sugerindo que eu feche os programas, que eu posso cancelar ou pressionar "feche programas" e o Windows forçará o fechamento de alguns ou de todos os aplicativos listados na caixa de diálogo.

Abro o gerenciador de tarefas e vejo que apenas cerca de 30% da minha memória está sendo usada no momento:

33% de utilização

Quando abro o monitor de recursos para ver quanta memória confirmada está sendo usada por aplicativos específicos, ainda vejo um uso de memória relativamente baixo:

Monitor de recursos

Eu tenho esse problema há algum tempo e tenho lutado para encontrar uma solução. Eu investiguei causas como um vazamento de driver usando o poolmon, mas nunca vi nada no poolmon que correspondesse ao que os outros descreveram como sinalizadores vermelhos para um vazamento de memória do driver. O que me deixa particularmente confuso é o motivo pelo qual o Win10 está me dizendo para fechar aplicativos quando tenho apenas 33% da memória do sistema em uso.


3
Tente acessar o gerenciador de tarefas e vá para a guia desempenho. O que mostra o campo de memória confirmada ?
DrZoo

Não salvei uma captura de tela, mas minha memória comprometida era uma alta porcentagem de disponível, algo como 17,5 gb / 19 gb.
Brandon

Respostas:


15

Palpites selvagens aqui.

Você desabilitou seu arquivo de permuta, seguindo o conselho aleatório de "otimização" de alguém.

Você possui um driver de sistema operacional que deseja um grande bloco de RAM física consecutiva. Mas não é possível obtê-lo porque toda a RAM física foi fragmentada ao longo do tempo. E como o arquivo de troca está desativado, ele não pode executar uma desfragmentação de RAM.

Ative seu arquivo de troca.

Como eu disse, palpite.


Bem, eu tenho um tamanho de arquivo de paginação definido de no máximo 3gb. É isso que você quer dizer com swapfile ou é algo gerenciado separadamente no Windows 10? Não é impossível, eu teria feito algo assim, tive problemas de desempenho extremamente ruins quando construí esta máquina em 10/2015 e tentei várias coisas, como desativar o estacionamento principal para corrigi-la. Acabou que havia um esquema de gerenciamento de energia que estava reduzindo meu poder para 10% e morrendo de fome em todos os componentes e foi por isso que tive problemas de desempenho sistêmico, mas é possível que eu tenha feito algo como você disse durante esse episódio.
Brandon

1
Altere o tamanho do arquivo de paginação para "Sistema gerenciado" e seus problemas provavelmente desaparecerão.
22416 Scott Stellar em:

Uma vez eu consegui gerenciar o sistema e ainda tinha o mesmo problema, levaria apenas mais tempo para se manifestar. Quando eu o definia como gerenciado pelo sistema, o arquivo de paginação atingia o máximo de 64 gb e, quando o comprometimento aumentava muito, eu ainda recebia os mesmos avisos de pouca memória. Mas eu ainda veria 70% da memória física disponível e nenhuma indicação no Monitor de Recursos de que mais de 60 + gb de memória estavam atualmente comprometidos com qualquer processo listado.
Brandon

Concordo plenamente com Zan e Scott, é o seu arquivo de paginação que está causando esse problema (consulte windowsitpro.com/windows-10/… para outra fonte que também diz isso). Defina-o como gerenciado pelo sistema e, se o problema aparecer novamente, ENTÃO comece a investigar.
precisa saber é o seguinte

Então, acho que o arquivo de paginação gerenciado pelo sistema foi a resposta principal aqui. Parece que configurá-lo para 3 GB estáticos simplesmente não é o ideal no ambiente Windows 10. Eu implementei esta solução há algumas semanas e a deixei executar em uso normal apenas para ver o que aconteceu e, enquanto ainda vejo muito mais memória confirmada do que a contabilizada na coluna Memória confirmada do Resource Monitor, não estou com pouca memória avisos ou problemas agora.
Brandon

14

Re seu último Q - a versão curta: A mensagem de erro é sobre o espaço de endereço virtual "confirmado". Se você olhar para o gráfico Commit Charge no instantâneo da segunda tela, verá que ele está realmente no limite ou muito próximo dele.

A quantidade de RAM "livre", "disponível" ou "em uso" não importa. Em particular, a falta de RAM "disponível" não é absolutamente o motivo da mensagem "pouca memória" ou "falta de memória".

O limite de confirmação é igual ao tamanho total da RAM + do arquivo de paginação. Quando a memória confirmada é alocada, ela é imediatamente cobrada para "confirmar a carga", embora ainda não tenha sido realmente usada ... o que significa que nenhum espaço de RAM ou PF é usado imediatamente. O espaço físico (na RAM ou no arquivo de paginação) é usado apenas quando a memória é realmente referenciada. A partir de então, ele deve ter um lugar para estar, até que o programa o libere ou que todo o processo termine.

Exemplo: suponha que você não tenha um arquivo de paginação, portanto, seu limite de confirmação é de 16 GB (seu tamanho de RAM). Agora, suponha que 8 processos tentem VirtualAlloc (MEM_COMMIT) 1 GB. Resultado: a taxa de confirmação é aumentada em 8 GB. No entanto, não há impacto imediato na RAM! É como se você tivesse comprado um bloco de papel na papelaria, mas na verdade não recebeu nenhum papel. Toda vez que você precisa de uma nova planilha, uma aparece magicamente. Até você usar o teclado inteiro (o tamanho da região alocada).

Agora, suponha que cada um desses processos acesse apenas 100 MB de seus 1 GB. A RAM usada seria apenas 800 MB.

Mas como cada um deles pode fazer referência a todos os seus 1 GB, o sistema operacional deve garantir que 8 GB de RAM + espaço no arquivo de paginação ... bem, apenas a RAM no caso de nenhum arquivo de paginação ... seja mantida disponível caso isso aconteça . Voltando à papelaria, eles precisam manter papel suficiente em estoque para dar a todos as folhas tantas quanto compraram anteriormente.

Portanto, o sistema operacional deve parar de permitir que o VirtualAlloc (MEM_COMMIT) seja bem-sucedido quando o valor atual confirmado atingir o limite.

Por quê? Como é esperado que o processo verifique o resultado do VirtualAlloc para ver se foi bem-sucedido. Depois de fazer isso e constatar que a alocação foi bem-sucedida, o processo tem todo o direito de esperar que suas referências subsequentes a toda a região comprometida sejam bem-sucedidas.

Se o Windows permitir que a cobrança de confirmação exceda a quantidade de espaço disponível para realizar esse espaço, essa expectativa nem sempre poderá ser atendida.

Uma solução rápida é aumentar o tamanho padrão (= inicial) do seu arquivo de paginação. A partir da explicação acima, você poderá ver por que isso evitará a mensagem de erro, mesmo que nada possa ser gravado nesse arquivo . Novamente, o sistema operacional está garantindo que o espaço para toda a taxa de confirmação esteja disponível , caso seja necessário . Quando processos alocam memória confirmada, eles estão apenas dizendo "ei, SO, eu posso precisar disso". Isso não significa que eles realmente o usarão, e certamente não significa que eles realmente o usaram ainda.

Para mais, veja minha resposta aqui .

Agora .... por que você está usando tanto commit quando seus processos parecem não aumentar, é outra questão. Para começar a analisar isso, mostre a guia Desempenho do Gerenciador de Tarefas, seção Memória.


Não tenho palavras para descrever uma resposta tão perfeita. Obrigado.
Vinicius Tavares

-2

Outra possibilidade é que você esteja usando o Win10 de 32 bits, não de 64 bits. Embora você tenha 16 GB de RAM instalada, existem limitações de SO de 32 bits que fazem uso prático acima de 4 instáveis. Além disso, o sistema operacional impõe limites rígidos / por processo / em que quantidade de RAM pode ser solicitada, independentemente da RAM física. Nesse caso, você não pode fazer muito além de mudar para o SO de 64 bits ou executar menos aplicativos simultaneamente.


2
Não seria possível executar o Win10 de 32 bits e o Gerenciador de tarefas mostrar um total de 16 GB, como no OQ. E, por outro lado, os limites por processo que o sistema operacional coloca na memória virtual, não na RAM. Não há chamadas que você possa fazer no Windows para alocar RAM per se . (Bem, AWE, mas isso exige privilégios de administrador e quase nada usa isso, exceto alguns programas do sistema.) Você aloca espaço de endereço virtual (digamos com o VirtualAlloc) e depois o usa; À medida que você o usa, o sistema operacional aloca RAM para o seu processo ("paginação por demanda"). Mas é claro que nem tudo isso precisa ser realizado na RAM ao mesmo tempo.
21717 Jamie Hanrahan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.