Você está enfrentando o problema Linux Ate My Ram .
Não entre em pânico.
Isso não é um problema.
Seu sistema está funcionando como projetado.
O problema não é o seu sistema operacional - o problema é sua compreensão do que é a memória "livre".
Os sistemas Unix usam memória para mais do que apenas executar programas. A memória pode ser usada para:
- Programas em execução (ativos / usados)
- Buffer de dados em trânsito (buffers)
- Cache de dados recentemente lidos / gravados no disco (cache)
- Absolutamente nada (grátis)
A seguir, é apresentado um breve tour (e amplamente incompleto) sobre como os sistemas Unix modernos relatam o uso da RAM.
O que é memória livre (a definição do SO) ?
Quando um sistema Unix está relatando RAM como Livre , significa "Não estou usando esta RAM para nada".
A RAM livre é efetivamente inútil - não está tornando o sistema mais rápido, apenas fica "livre", caso algo precise. Que algo poderia ser um dos outros três itens que mencionei acima.
O que são memória cache e buffer?
Memória cache e buffer são RAM que o sistema operacional está usando para acelerar seu sistema.
Como essa memória não é necessária para a execução de programas no momento , seu sistema operacional está usando-a para armazenar dados de que precisa com freqüência - por exemplo, a biblioteca C (necessária para praticamente todos os programas em execução) é quase sempre mantida na cache
memória. O sistema não precisa ir ao disco para encontrar as instruções necessárias para imprimir "Hello World" na tela.
Na verdade, é muito mais complicado do que isso - há memória compartilhada , memória com fio etc. - mas, para nossos propósitos, essa explicação simples é adequada.
O que é memória ativa?
A memória ativa faz parte do que entendemos como memória "usada" - RAM que os aplicativos estão usando para o que quer que eles façam - classificando planilhas, servindo páginas da web, editando gráficos etc.
A memória "ativa" está "ativa" recentemente - - o programa que alega ter feito uso de seu conteúdo (leitura ou escrita) e não é considerado um bom candidato para a troca.
O que é memória inativa?
Como a memória ativa, a memória inativa é a RAM que os aplicativos estão usando para o que eles fazem. A diferença é que essa memória não é acessada há algum tempo; portanto, se for necessário empurrar, o sistema operacional acha que pode ser trocado para o disco e (com um pouco de sorte) o programa alegando que não a solicitará novamente. nunca vai perceber.
O que é a memória "Usado" (a definição HUMAN)
O que você e eu consideramos como memória "Usado" é, essencialmente, a soma da memória Ativa e Inativa. Toda a RAM atualmente reivindicada pelos aplicativos para uso.
Contanto que você tenha mais RAM instalada do que a soma da memória Ativa e Inativa (além de uma boa margem de segurança, digamos 512 a 1024 MB no topo), você estará em um local adequado: seu sistema operacional provavelmente não estará afetando a troca e prejudicando o desempenho .
O que é memória "Livre" (a definição HUMAN) ?
O que você e eu consideramos como memória "livre" é a memória disponível para executar programas.
Isso é um pouco mais complicado do que apenas a figura "Grátis" que o seu sistema operacional informa. Quando um programa solicita RAM, o sistema operacional tenta obtê-la da maneira menos perturbadora possível:
- Se houver memória livre disponível (sem fazer nada), a RAM será alocada.
- Se não houver memória livre disponível, o sistema operacional irá canibalizar o espaço do cache e do buffer: o material acessado menos recentemente / com menos frequência no buffer pool será descartado e a RAM fornecida ao programa.
- Se não houver RAM de buffer / cache para canibalizar, o trocador examinará a memória inativa e escolherá as regiões que acha que têm menor probabilidade de serem acessadas. Esses dados serão paginados para troca (disco) e a RAM recém-liberada fornecida ao programa.
- Se toda a RAM inativa tiver sido trocada, o trocador começará a colocar a RAM ativa no disco.
(É nesse ponto que o desempenho geralmente ocorre: sempre que um programa aciona a CPU, seus bits trocados precisam ser trazidos de volta à RAM, o que significa que a memória ativa de outro programa precisa ser trocada - a alta rotatividade no swap é chamada thrashing )
- Se o sistema trocou tudo o que pode (e preencheu a partição de troca), ou se você estiver executando um sistema sem uma partição de troca, coisas ruins acontecem. Nesse ponto, uma das duas coisas ocorrerá:
malloc()
vai falhar. Esse é o comportamento de conformidade com o POSIX - o sistema operacional informará o programa solicitando RAM que não pode atender à solicitação.
O programa pode pedir menos RAM ou, se não puder se contentar com um pedaço menor de memória, pode limpar e sair. (Se o programa estiver mal escrito, ele simplesmente trava.)
- Se você estiver em um Linux, o OOM-Killer pode entrar em uma onda de assassinatos, terminando outros processos para tentar liberar RAM suficiente para atender à solicitação.
Caso você não saiba pela minha descrição aqui e pela resposta à pergunta vinculada, acho que essa é uma maneira terrível de lidar com o problema.
Por que a RAM livre aumenta quando você exclui arquivos?
No exemplo da pergunta aqui, você notou que é possível "libertar" a RAM excluindo o arquivo de backup - a explicação para isso é bastante simples: como nada está usando esse arquivo (nenhum identificador de arquivo aberto) e não é mais acessível a partir de o sistema de arquivos (desvinculado), o sistema operacional sabe que ninguém jamais acessará esses dados novamente e remove os dados do cache do sistema de arquivos.
Isso faz com que o sistema operacional reporte mais memória livre, mas não afeta o desempenho do sistema.