Esta é uma pergunta canônica sobre como os sistemas operacionais Unix relatam o uso de memória.
Perguntas semelhantes:
Eu tenho um servidor de produção executando o Debian 6.0.6 Squeeze
#uname -a
Linux debsrv 2.6.32-5-xen-amd64 #1 SMP Sun Sep 23 13:49:30 UTC 2012 x86_64 GNU/Linux
Todos os dias o cron executa o script de backup como root:
#crontab -e
0 5 * * * /root/sites_backup.sh > /dev/null 2>&1
#nano /root/sites_backup.sh
#!/bin/bash
str=`date +%Y-%m-%d-%H-%M-%S`
tar pzcf /home/backups/sites/mysite-$str.tar.gz /var/sites/mysite/public_html/www
mysqldump -u mysite -pmypass mysite | gzip -9 > /home/backups/sites/mysite-$str.sql.gz
cd /home/backups/sites/
sha512sum mysite-$str* > /home/backups/sites/mysite-$str.tar.gz.DIGESTS
cd ~
Tudo funciona perfeitamente, mas noto que o gráfico de memória de Munin mostra aumento de cache e buffers após o backup.
Então, basta baixar arquivos de backup e excluí-los. Após a exclusão, o gráfico de memória de Munin retorna o cache e os buffers ao estado anterior ao backup.
Aqui está o gráfico de Munin:
A imagem hospedada externamente era um link morto.
linux
unix
memory-usage
Comunidade
fonte
fonte
Respostas:
Esse é o mesmo "problema" que o servidor se recusa a usar a partição swap e algumas outras perguntas semelhantes neste site. ( Alto uso de memória no servidor Linux , uso de memória no LINUX , servidor Web com pouca memória , etc.)
Preste atenção ao fato de que o consumo de memória é do cache . Isso significa que ele mantém um arquivo na memória. A memória em cache é a memória "livre". Em vez de deixar o bloco de memória vazio, seu sistema operacional mantém os arquivos lidos recentemente nesse espaço. Se um aplicativo precisar dessa memória, ela será usada pelo aplicativo. Até lá, há uma chance de evitar que você precise ler um arquivo do disco novamente, se for mencionado com frequência.
De acordo com este gráfico, seu consumo efetivo de memória não mudou durante toda a duração do gráfico.
fonte
sync; echo 3 > /proc/sys/vm/drop_caches
após o backup?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:
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:
(É 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 )
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.)
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.
fonte
top
e relata RAM livre / com fio / ativa / inativa.Outra coisa para verificar se o acima falhou:
De: https://stackoverflow.com/a/5467207
fonte