Páginas

terça-feira, 13 de novembro de 2012

Limpar Memória

Olá a todos!

Recentemente eu tive um problema com alguns de meus roteadores Linux onde também rodam algumas máquinas virtuais. A memória cache dessas máquinas estava muito alta, e isso causava uma certa lentidão no sistema. A solução é simples, basta executar o seguinte comando:

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

Ou então

# sysctl -w vm.drop_caches=3

Esse comandos limpam todos os caches da memória. É chato porém ter que ficar monitorando o tempo todo e executando comandos, então eu criei um shell script que é agendado no crontab para ser executado a cada 30 minutos (este é o tempo que eu percebi para o crescimento da memória utilizada, pode variar para cada um). O script tem o seguinte conteúdo:

#!/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin

TMEM=`free -m | awk 'NR == 2 {print $2}'` # Variável para memória total
UMEM=`free -m | awk 'NR == 2 {print $3}'` # Variável para memória usada
PMEM=`echo $((40 * $TMEM / 100))` # Variável para 40% da memória total

if [ $UMEM -ge $PMEM ] # Se a memória usada for maior ou igual a 40%
        then
                echo 3 > /proc/sys/vm/drop_caches # Limpa os caches
        else
                exit;
fi

Agora basta dar permissão de execução (chmod + x cache.sh ou chmod 755 cache.sh) e agendar a sua execução:

crontab -e

30 * * * * sh /opt/cache.sh

Simples e útil!!!

Até a próxima !!!

Nenhum comentário:

Postar um comentário