Windows 10 avisos de pouca memória quando tenho bastante memória disponível

24

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

Eu abro o gerenciador de tarefas e vejo que apenas 30% da minha memória está sendo usada atualmente:

Quandoabroomonitorderecursosparaverquantamemóriacomprometidaestásendousadaporaplicativosespecíficos,aindavejoumusodememóriarelativamentebaixo:

Eu tive esse problema por 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 é por que o Win10 está me dizendo para fechar os aplicativos quando eu tiver apenas 33% da memória do sistema sendo usada.

    
por Brandon 15.04.2016 / 16:43

3 respostas

14

Palpites selvagens aqui.

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

Você tem um tipo de driver de sistema operacional que deseja um grande bloco de RAM física consecutiva. Mas não pode 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 fazer uma desfragmentação da RAM.

Habilite seu arquivo de troca.

Como eu disse, palpite.

    
por 15.04.2016 / 18:27
15

Re seu último Q - a versão curta: A mensagem de erro é sobre o espaço de endereço virtual "comprometido". Se você olhar para o gráfico Commit Charge no seu segundo instantâneo de tela, verá que está de fato 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 a razão para a mensagem "pouca memória" ou "falta de memória".

O limite de confirmação é igual ao total de RAM + tamanho do arquivo de paginação. Quando a memória comprometida é alocada, ela é imediatamente cobrada para "commit charge", mesmo que ela não tenha sido usada ainda ... significando que nenhum espaço RAM ou PF é usado imediatamente. O espaço físico (seja na RAM ou no arquivo de paginação) é usado apenas quando a memória é realmente referenciada. A partir de então, deve haver algum lugar para estar, até que o programa o liberte, ou 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 cada um com VirtualAlloc (MEM_COMMIT) 1 GB. Resultado: a carga de confirmação é aumentada em 8 GB. Não há impacto imediato na RAM, no entanto! É como se você comprasse um bloco de papel na papelaria, mas na verdade não comprou nenhum papel. Toda vez que você precisa de uma nova folha, porém, uma magicamente aparece. Até você usar todo o bloco (o tamanho da região alocada).

Suponha agora que cada um desses processos realmente acessa 100 MB de seu 1 GB. A RAM usada seria de apenas 800 MB.

Mas como cada um deles pode referenciar todo o seu 1 GB, o sistema operacional precisa garantir 8 GB de RAM + espaço no arquivo de paginação ... bem, apenas RAM no caso de nenhum arquivo de paginação. .. é mantido disponível apenas no caso de isso acontecer. Voltando à papelaria, eles precisam manter papel suficiente em estoque para dar a todos o mesmo número de folhas que compraram anteriormente.

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

Por quê? Porque o processo é esperado para verificar o resultado do VirtualAlloc para ver se ele foi bem-sucedido. Depois de fazer isso e descobrir 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 confirmada sejam bem-sucedidas.

Se o Windows permitisse que a taxa de confirmação excedesse a quantidade de espaço disponível para realizar esse espaço, essa expectativa nem sempre poderia 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ê deve ser capaz de ver por que isso evitará a mensagem de erro mesmo que nada jamais possa ser gravado nesse arquivo . Novamente, o sistema operacional está garantindo que o espaço para toda a carga de commit esteja disponível caso precise dele . Quando os processos alocam a memória comprometida, eles estão apenas dizendo "ei, SO, eu poderia precisar disso". Isso não significa que eles realmente vão usá-lo, e isso certamente não significa que eles realmente o usaram ainda.

Para mais, veja minha resposta aqui .

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

    
por 17.04.2016 / 02:11
-2

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

    
por 15.04.2016 / 18:32