2014-03-11 02:46:08 +0000 2014-03-11 02:46:08 +0000
104
104

Porque é que o uso total de memória relatado pelo Gestor de Tarefas do Windows é muito superior à soma do uso de memória de todos os processos?

O Gestor de Tarefas mostra a minha utilização total de memória em 90% do total dos meus 6 GB, mas nenhum processo utiliza mais de 250 MB de RAM, e a soma da utilização de RAM de todos os processos em execução é inferior a 2 GB. Eu tentei:

  • Olhando para os números na coluna “Memória” no separador “Processos” do Gestor de Tarefas do Windows 8.
  • Olhando para as colunas “Conjunto de Trabalho”, “Conjunto de Trabalho Privado”, “Conjunto de Trabalho Partilhado”, e “Commit Size” no separador “Detalhes” do Gestor de Tarefas.
  • Olhando para colunas semelhantes relacionadas com a memória no Process Explorer.
  • Tentei executar o Sysinternals RAMMap, mas enquanto estou a ter a crise de baixa memória, ele cai no lançamento. Uma vez resolvido o problema, o RAMMap funciona normalmente, mas nesse momento é demasiado tarde.

Todos mostram uma quantidade bastante pequena de memória a ser utilizada.

Há muitas pessoas a perguntar variantes desta questão, com várias versões de janelas, por toda a Internet. Algumas conseguem resolver os seus problemas de baixa memória, muitas vezes reinstalando software; por vezes reinstalando janelas a partir do zero. Procuro uma resposta para as questões gerais que todas estas pessoas partilham, e que parecem nunca obter resposta noutro lugar:

  1. Porque é que a memória total utilizada é muito superior à memória utilizada por todos os processos listados, independentemente da forma como eu os tento contar?
  2. Como poderia o windows “saber” que a memória é utilizada sem saber que programa a está a utilizar?
  3. Que processos poderiam eventualmente utilizar a memória mas não aparecer na lista?
  4. Há por aí algum software que possa dar mais informações sobre a memória usada?

Detalhes específicos do meu próprio problema: Desde a actualização para Windows 8.1, o problema ocorre assim que inicio a sessão. Fico sem memória assim que corro qualquer programa. Notei no Process Explorer que várias instâncias do iexplore.exe estavam a correr, aparentemente iniciadas automaticamente. Uma instância em particular estava a usar apenas alguns MB de RAM, mas mostrava centenas de milhões de falhas de página. Por capricho, matei esse processo específico, e o uso de memória caiu imediatamente em 70%.

Levando a uma questão específica:

  • Como poderia matar um processo que supostamente só utilizava alguns MB libertar vários GB?

& E uma pergunta (presumivelmente dura) de bónus:

& - Sem reinstalar o Windows, como poderia evitar ter de passar por isto sempre que reiniciar o meu computador?

Respostas (1)

6
6
6
2014-03-11 05:23:42 +0000

A propósito, deve tentar não utilizar o termo “memória”. Isto cria muita confusão. Se se refere à memória física, diga “memória física”, ou “RAM”. Se se refere a memória virtual, diga-o. Se se refere a loja de apoio, diga-o.

Porque é que a memória total utilizada é muito superior à memória utilizada por todos os processos listados, independentemente da forma como eu os tento contar?

& Porque o sistema operativo não desperdiça memória física (RAM), a menos que não tenha escolha.

Como poderia o windows “saber” que a memória é utilizada sem saber que programa a está a utilizar?

& Porque nenhum programa está a utilizá-la. Considere, por exemplo, a memória que contém o código para um programa que acabou de terminar. Nenhum programa está a utilizá-la. Mas essa memória é utilizada, uma vez que não é livre e contém dados que podem ser úteis (no caso de o programa ser executado novamente).

Que processos podem eventualmente utilizar a memória mas que agora aparecem na lista?

& Não é utilizada por processos.

Existe por aí algum software que possa dar mais informações sobre memória usada? RAMMap pode fazer isto.

& Há apenas duas possibilidades, a RAM pode ser usada ou pode ser desperdiçada. Obviamente, a primeira é melhor. Qualquer memória livre é desperdiçada para sempre – uma máquina de 4GB não pode usar 2GB hoje para usar 6GB amanhã. Se está a pensar “quero-a livre agora para poder utilizá-la mais tarde”, esqueça isso. Pode utilizá-la agora e utilizá-la mais tarde.

Como poderia matar um processo que supostamente só utilizava alguns MB libertar vários GB?

& Está a ficar sem memória física, e não com memória física. Tem muita memória física gratuita mas insuficiente para que o SO continue a atribuir memória virtual que possa necessitar de backup.

O processo estava a utilizar apenas alguns MB de memória física, mas o SO poderia ter tido de reservar vários GB de memória virtual com suporte para o mesmo. Por exemplo, suponha que um processo cria um mapeamento gravável e privado de memória de um ficheiro de 2 GB. O sistema operativo deve reservar 2 GB de memória virtual com suporte para o processo, porque pode escrever em cada byte desse mapeamento. Além disso, pode nunca escrever para qualquer um deles. É por isso que é necessário um ficheiro de paginação de bom tamanho.

Os sistemas operativos modernos escrevem muitos cheques (loja de suporte promissora) que nunca serão descontados (requerem RAM). Não pode continuar a passar cheques (loja de suporte promissora) mesmo que tenha muito dinheiro no banco (RAM gratuita) se já tiver passado um monte de cheques grandes que podem ou não ser descontados (prometeu tanta loja de suporte como tem). Os ficheiros de paginação adicionam loja de fundos, permitindo que o SO continue a passar cheques.

Questões relacionadas

8
19
13
6
3