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):
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/



0 Respostas para “Limpeza de memória cache no Linux”