Limpar o cache da memória RAM apenas quando necessário Linux user

Quando deixamos o servidor ligado por muitos dias é comum o uso excessivo da memória devido ao cache não usado.Fiz este script que limpa o cache apenas quando a memória livre fica abaixo de determinado valor, assim posso deixar ele executando do cron a cada hora e ele só vai limpar o cache quando for realmente necessário (memória livre abaixo do que você definir).

Para limpar o cache usei:

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

O que só funciona à partir do kernel 2.6.16.

[ Download: clearcache.sh ]   [ Enviar nova versão ]

Versões atualizadas deste script (NOVO)
Linux user

Publicado por Fernando em 01/04/2013

Changelog: Conforme sugestão dos colegas, troquei o grep pelo awk com menos comandos e acrescentei a possibilidade de loggar sempre que limpar o cache. Para isso achei melhor usar o logger, que é um utilitário do syslogd e que vai loggar no /var/log/messages.

(versão 2)

 

Linux user

Publicado por Fernando em 08/05/2013

Changelog: Nesta nova versão eu implementei a função de daemon, desta forma a pessoa não precisa colocar no crontab, é só configurar e executar…

Tem diversas mudanças interessantes no código: daemon, controle de PID, cálculo floating point, controle de processos…

Uso:
–help :: Show this Help
–force :: Drop caches without checking
–start :: Run in daemon mode
–stop :: Stop the daemon
–restart :: Stop and restart daemon
–meminfo :: Only print memory information
(without arguments) :: Same as start

(versão 3)

 

Linux user

Publicado por euteste da silva em 27/05/2013

Changelog: Coloquei no script uma validação da versão do kernel, pois nem todos possuem essa feature.
E na function clear_cache estava dando problema a linha do if.

(versão 4)

 

[ Esconder código-fonte ]

#!/bin/bash
#
#
# Este script limpa o Cache da Memória RAM sempre que a memória livre estiver abaixo de $MEM_MIN
# No caso deixei pra limpar o cache sempre que a memória livre estiver abaixo de 1GB, adaptar às suas necessidades
# Eu deixo este script no cron do root para executar a cada hora, e ele só vai limpar o cache quando for necessário
#
# Escrito por Fernando B. Giannasi - março/2013
#
# Informações da memória
MEM_LIVRE=`cat /proc/meminfo | grep "^MemFree" | tr -s ' ' | cut -d ' ' -f2` && MEM_LIVRE=`echo "$MEM_LIVRE/1024.0" | bc`
MEM_TOTAL=`cat /proc/meminfo | grep "^MemTotal" | tr -s ' ' | cut -d ' ' -f2` && MEM_TOTAL=`echo "$MEM_TOTAL/1024.0" | bc`
MEM_MIN=`echo 1024`
# Só funciona como root, se não for root precisaremos usar o sudo
SUDO=`which sudo`
if [ "`whoami`" == "root" ]; then ROOT=true; fi
if [ ! "`which sudo`" ] && [ !$ROOT ]; then echo "Não é o superusuário e o SUDO não foi encontrado"; exit 1; fi
# Finalmente limpando o Cache...
if [ "$MEM_LIVRE" -le "$MEM_MIN" ]
then
    echo "Efetuando limpeza do Cache da memória..."
    if [ $ROOT ]; then sync; echo 3 > /proc/sys/vm/drop_caches; else $SUDO sync;echo 3 | $SUDO tee /proc/sys/vm/drop_caches > /dev/null; fi
    MEM_APOS=`cat /proc/meminfo | grep "^MemFree" | tr -s ' ' | cut -d ' ' -f2` && MEM_APOS=`echo "$MEM_APOS/1024.0" | bc`
    echo "Memória total instalada: $MEM_TOTAL MB"
    echo "Memória livre antes: $MEM_LIVRE MB"
    echo "Memória livre após: $MEM_APOS MB"
else
    echo "Não é necessário limpar o Cache da memória"
fi
exit 0

 

 

http://www.vivaolinux.com.br/script/Limpar-o-cache-da-memoria-RAM-apenas-quando-necessario

Deixe um comentário