Limpeza de memória cache no Linux

Dias atrás me deparei com algumas máquinas que estavam apresentando lentidão em qualquer comando executado. Um simples ls demorava uma eternidade para ser executado, o que não poderia acontecer, já que as máquinas possuem muito mais memória do que eu ;-).

Comecei verificando os processos que estavam sendo executados, quais usuários estavam conectados, fiquei observando o resultado do comando top e aparentemente tudo estava normal, vi que o consumo de CPU estava baixo, porém o consumo de memória estava lá nas alturas.

Já ia reiniciar a máquina quando olhei de novo para a saída do comando top e a linha que demonstra a estatística de uso do swap me chamou atenção (a saída abaixo é da minha máquina, a figura é somente para ilustrar):

Cabeçalho do comando top

O linux guarda um espaço na memória cache para programas e comandos que foram usados recentemente, permitindo que sejam executados de maneira mais rápida no futuro. E no caso das máquinas, esse espaço já estava chegando ao limite da memória física, causando lentidão na execução dos processos.

Ok, descobri o problema da lentidão, e um simples reboot resolveria o caso, mas em um ambiente de produção, isso não é interessante, então, pesquisando mais um pouco, localizei um procedimento que permite limpar a memória cache sem reiniciar a máquina.

Os procedimentos abaixo, devem ser executados como root:

# sync
# echo 3 > /proc/sys/vm/drop_caches

O comando sync faz com que todo o cache do sistema de arquivos que está temporariamente armazenado na memória, seja descarregado no disco e liberado, evitando a perda de dados.

Ao inserir o número “1” no arquivo /proc/sys/vm/drop_caches, é liberado somente pagecache, inserir o número “2” libera pagecache e inodes. A opção utilizada, número “3” faz como que o kernel libere pagecache, dentries e inodes.

Para checar novamente o uso da memória:

# free -m

ou

# top

Uma sugestão, para máquinas que ficam muito tempo ligadas, é criar um script com os comandos acima e inserir no cron, para ser executado regularmente.

Para saber mais:

http://www.kernel.org/doc/Documentation/sysctl/vm.txt
http://linux-mm.org/Drop_Caches
http://www.ibm.com/developerworks/linux/library/l-virtual-filesystem-switch/

Anúncios

Um comentário sobre “Limpeza de memória cache no Linux

  1. Guilherme Fidelis 27/09/2013 / 5:29 PM

    Valeu pelos comandos, me ajudou bastante!

Os comentários estão desativados.