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 ]
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.
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
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.
#!/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óriaMEM_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 sudoSUDO=`which sudo`if [ "`whoami`" == "root" ]; then ROOT=true; fiif [ ! "`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"fiexit 0 |
http://www.vivaolinux.com.br/script/Limpar-o-cache-da-memoria-RAM-apenas-quando-necessario

