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

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

Tenho tido um problema em que, se meu sistema ficar ligado por alguns dias sem ser reinicializado, começarei a receber avisos dizendo "Feche programas para evitar perda de informações" e, em seguida, uma caixa de diálogo sugerindo que eu feche programas, que posso cancelar ou clicar "fechar 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:

33% de utilização

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

Monitor de recursos

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

Responder1

Suposições malucas aqui.

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

Você tem algum tipo de driver de sistema operacional que deseja um grande bloco de RAM física consecutiva. Mas não é possível porque toda a RAM física foi fragmentada ao longo do tempo. E como o arquivo de troca está desabilitado, ele não pode desfragmentar a RAM.

Habilite seu arquivo de troca.

Como eu disse, palpite.

Responder2

Quanto ao seu último Q - a versão resumida: A mensagem de erro é sobre espaço de endereço virtual "confirmado". Se você observar 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 é de forma alguma a razão para a mensagem "pouca memória" ou "memória insuficiente".

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

Exemplo: suponha que você não tenha nenhum arquivo de paginação, portanto seu limite de commit é de 16 GB (seu tamanho de RAM). Agora, suponha que 8 processos cada tentem VirtualAlloc(MEM_COMMIT) 1 GB. Resultado: a cobrança de confirmação aumentou em 8 GB. No entanto, não há impacto imediato na RAM! É como se você comprasse um bloco de papel na papelaria, mas na verdade não conseguisse nenhum papel. Cada vez que você precisa de uma nova planilha, uma aparece magicamente. Até você usar todo o pad (o tamanho da região alocada).

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

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

Conseqüentemente, o sistema operacional deve parar de permitir que o VirtualAlloc(MEM_COMMIT) seja bem-sucedido quando o valor atual comprometido atingir o limite.

Por que? Porque espera-se que o processo verifique o resultado do VirtualAlloc para ver se foi bem-sucedido. Uma vez feito isso e constatado que a alocação foi bem-sucedida, o processo tem todo o direito de esperar que as suas referências subsequentes a toda a região comprometida sejam bem-sucedidas.

Se o Windows permitisse que a cobrança 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ê poderá ver por que isso evitará a mensagem de erromesmo que nada possa ser gravado nesse arquivo. Novamente, o sistema operacional está garantindo que haja espaço disponível para toda a carga de commitcaso precise. Quando os processos alocam memória comprometida, eles estão apenas dizendo "ei, SO, eupoderpreciso tanto disso." Isso não significa que eles realmente irão usá-lo, e certamente não significa que eles realmente o usaram ainda.

Para mais, vejaminha resposta aqui.

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

Responder3

Outra possibilidade é que você esteja usando Win10 de 32 bits, não de 64 bits. Embora você tenha 16 GB de RAM instalados, existem limitações do sistema operacional de 32 bits que tornam o uso prático acima de 4 irregular. Além disso, o sistema operacional imporá limites rígidos/por processo/ sobre a quantidade de RAM que pode ser solicitada, independentemente da RAM física. Se for esse o caso, não há muito que você possa fazer além de mudar para um sistema operacional de 64 bits ou executar menos aplicativos simultaneamente.

informação relacionada