Limpando cache de disco/memória no Linux

Quem nunca se confundiu com o output do comando “free -m” tentando monitorar a utilização de memória RAM no Linux ao verificar a quantidade de memória informada como “cached”?

Essa quantidade de memória indicada como “cached” está sempre sendo utilizada pelo sistema como “cache rápido” para posterior escrita em disco. Diga-se de passagem, “cache” é um termo inglês que significa “esconderijo”.

Existe no Linux uma forma simples de limpar esse cache, fazendo com que tudo que está em cache de memória RAM para ser gravado em disco, vá pra disco de uma vez. Isso torna a memória livre novamente. Segue abaixo sequência de comandos para você entender o que acontece:

[root@localhost ZimbraInside]# free -m
total       used       free     shared    buffers     cached
Mem:          3016        997       2019          0        339        458
-/+ buffers/cache:        198       2818
Swap:         5031         82       4949
[root@localhost ZimbraInside]# sync; echo 3 > /proc/sys/vm/drop_caches
[root@localhost ZimbraInside]# free -m
total       used       free     shared    buffers     cached
Mem:          3016        152       2864          0          0         27
-/+ buffers/cache:        124       2892
Swap:         5031         82       4949
[root@localhost ZimbraInside]#

Percebeu a mágica? Vale lembrar que o arquivo /proc/sys/vm/drop_caches existe apenas do release 2.6.16 do kernel em diante. Se tentar fazer em kernel antigo, não vai encontrar este arquivo.

O comando “sync” em conjunto com a alteração no /proc/sys/vm/drop_caches faz com que todo o cache do sistema de arquivos que está temporariamente armazenado em cache de memória RAM, seja despejado em disco e liberado.

Pelo comando free -m ou qualquer outro monitor de memória RAM podemos visualizar perfeitamente a queda de uso do cache.

Por: Hudson Murilo dos Santos
Referências:
man sync
info sync
man proc
http://www.scottklarr.com/
http://www.linuxinsight.com/proc_sys_vm_drop_caches.html

6 interações sobre “Limpando cache de disco/memória no Linux

  1. Tenho um servidor antigo, nele nao tem o arquivo drop_caches como faço para efetuar a limpeza do Cached.
    Desde ja agradeço
    Alexandre

    1. Olá Alexandre,

      Obrigado pela visita e interesse pelo post. Infelizmente este recurso não está presente em “kerneis” de versão inferior a 2.6.16, conforme citado no post. Em um dos links de referência ao post, pode-se verificar:

      “…Unfortunately, 2.4 kernels
      Submitted by admin on Fri, 2010-03-05 12:13.

      Unfortunately, 2.4 kernels don’t have any such neat mechanism to get rid of cached data.

      Why not upgrade, btw? 2.4 is ancient history by now…”

      Este comentário é referenciado em http://www.linuxinsight.com/proc_sys_vm_drop_caches.html .

      Se possível, procure atualizar a versão de seu kernel, ou tente migrar para um distro enxuta e recente (Debian ou CentOS), caso este recurso seja indispensável. Outra opção é realizar um “tuning” de seu kernel, passando-o novos parâmetros via sysctl para uma descarga amis frequente de cache de disco em memória para o disco.

    1. Olá Thiago,

      Depende muito de cada caso. O cache de disco em memória é rotacionado pelo kernel linux automaticamente, de acordo com a prioridade dos arquivos a serem escritos em cache. Caso um novo arquivo necessita ser escrito, um arquivo mais antigo é eliminado do cache, e assim por diante. A frequência desta limpeza pode ser alterada nos parâmetros/semáforos do kernel (/etc/sysctl.conf).

      Más, se há uma real necessidade de uma limpeza forçada, não vejo muito problema em automatizar esta tarefa via cron, porém, seu sistema tende a ficar mais lento devido ao overhead causado por espera de I/O em disco, além de que o cache de disco voltará a alocar memória em questão de horas, ou talvez minutos (varia de acordo com a frequência de I/O feita em disco).

      Espero ter ajudado…

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Retype the CAPTCHA code from the image
Change the CAPTCHA codeSpeak the CAPTCHA code