quarta-feira, 9 de julho de 2008

Limpando o cache de forma rápida

Aqueles que são administradores de redes e servidores já devem ter passado por problemas parecidos com este.

Nesta dica irei apresentar um comando simples para limpar sua memória em cache.

Resolvi escrever sobre isto por ter visto duas vezes na mesma semana problemas relacionados a isso. Um foi aqui mesmo onde trabalho, onde estávamos percebendo que o consumo de memória em um dos servidores estava muito alto, porém com pouca atividade no mesmo, no qual percebi que nada mais era do que muita memória alocada em cache sem necessidade no momento. Desenvolvedores java...vai entender.. hauhauha (brincadeira.. :p).

Outro caso foi uma dúvida que surgiu, bem parecida, em um fórum do qual faço parte, onde um rapaz estava passando pelo mesmo problema no servidor dele... Com consumo exagerado de memória. Ele até colou o resultado do top no qual podíamos ver claramente que não haviam processos consumindo tudo aquilo de memória, e mais uma vez pudemos ver que o grande vilão era o cache, o que lhe passava essa impressão de memória totalmente consumida.

O comando para se limpar este chache é o seguinte:

# echo 3 > /proc/sys/vm/drop_caches
Exemplo:

Aqui vai uma saída do meu top antes de rodar o comando. ( Reparem no consumo de memória armazenada em Cache na última linha!)
top - 09:40:03 up 1:42, 1 user, load average: 0.06, 0.20, 0.20
Tasks: 83 total, 2 running, 80 sleeping, 0 stopped, 1 zombie
Cpu(s): 4.3%us, 0.5%sy, 0.2%ni, 95.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1944240k total, 898916k used, 245324k free, 51176k buffers
Swap: 996020k total, 0k used, 996020k free, 969000k cached
Repare agora o resultado obtido pelo top depois de executar o comando para limpar o cache:
top - 09:45:03 up 1:47, 1 user, load average: 0.32, 0.16, 0.17
Tasks: 85 total, 3 running, 81 sleeping, 0 stopped, 1 zombie
Cpu(s): 11.2%us, 1.5%sy, 0.0%ni, 63.4%id, 23.9%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1944240k total, 329412k used, 1614828k free, 768k buffers
Swap: 996020k total, 0k used, 996020k free, 69088k cached
A memória armazenada em cache caiu de ~969mb para ~69mb. ;]

Bingo!

12 comentários:

Anônimo disse...

Prezados:

Esta dica não poderia ter vindo em melhor hora!
Coincidentemente (existe coincidência?), estava em busca de uma solução.

Muito grato,
Prof Paulo Maximo, MSc

kalib disse...

Huahuahuha
Que bom que lhe foi útil. ;]

Abraço e boa sorte

Anônimo disse...

poxa estava procurando por isso a tempos!!!
muito boa a dica!!! parabéns!!!

Anônimo disse...

Não entendi qual a serventia disso. No que essa memória cache estava atrapalhando? Ela está ai para fazer o servidor mais rápido, e se algo precisasse dessa memória ocupada, ela seria automaticamente liberada pelo kernel, pois é somente cache.

Se é para ver o quando o servidor está consumindo de memória realmente, o free já diz quanto é o consumo -memória cache. O Exmap pode ser mais preciso, mas acho que não é necessário.

Anônimo disse...

Muito bom o seu post.
Infelizmente, por falta de conhecimento de alguns administradores de Linux em um cliente na Bahia, tive que retirar minha aplicação de controle de acesso, desenvolvido em Java, simplesmente pelo alto uso da memória.
Tks!!!

kalib disse...

Acontece que o sistema operacional utiliza o cache como um ótimo recurso...sim..é verdade...auxilia em muitas vezes..
Mas, estranhamente, algumas aplicações..principalmente em java acabam por ignorar isso...como foi o que observamos aqui...e esquece que deixou algo alocado em cache... é como se alocasse...não desalocasse...e quando precisasse...alocasse mais memória ainda...enfim... o que no final do dia virava uma catástrofe. :/

Anônimo disse...

Kalib,

Muito boa dica cara!

Uma duvida. Esse comando só limpa o que não está sendo usado né?

Obrigado!

Abraços

kalib disse...

Sim..
Ele não vai atrapalhar o que está em uso. ;]

E em breve estarei postando aqui uma dica para automatizar esse processo.;]

Anônimo disse...

Ok.

Muito Obrigado Kalib!

Abraços

Anônimo disse...

gostaria de saber:
onde escrevo isso ? é no executar / CMD ??
e escrevo tudo completo sem espaços ? ou tem algum espaço ? onde ??

Unknown disse...

Muito Bom Estava a Proucura valeu mesmo de coração !

TarcisioTNA disse...

Parabéns pela dica! o cache tava em 60% baixou para 4% dai coloquei de hora em hora para rodar no cron.

Usando Ubuntu 10.10 siga o mestre...