Limpando sua memória cache de forma simples (parte 2)

Publicado por Marcelo Cavalcante Rocha em 18/07/2008

[ Hits: 15.340 ]

 


Limpando sua memória cache de forma simples (parte 2)



Muitos me pediram por aqui ou mesmo por email para explicar como seria a implementação desta técnica de forma automatizada.

Bom, utilizo-a para o servidor que citei no artigo anterior, utilizado pelos nossos amigos desenvolvedores Java. ;] Nada pessoal, heim?!

Aqui precisaremos apenas de um mínimo de intimidade com shell script e um pouco de conhecimento sobre o agendamento de tarefas no Linux através do cron.

Mãos a obra...

A missão: uma vez que nossos amigos não conseguem trabalhar de forma harmônica com a alocação e desalocação de memória em nossos servidores, agendaremos a limpeza de cache para todos os dias no começo do expediente (8:00) e após o almoço.

Lembrando que este é apenas um exemplo, mas você pode adaptar os horários de acordo com sua real necessidade.

Soldados disponíveis: shell script e cron

Plano: um pequeno e simples script em shell será executado nos dias e horários informados anteriormente de forma a fazer uma limpeza no cache.

Execução:

Primeiro criaremos o script que fará a ação de limpeza do cache. Para isso abra o editor de textos de sua preferência. Particularmente prefiro o vim, mas este pode ser substituído por qualquer outro.

No seu corpo insira o seguinte conteúdo:

#!/bin/bash
#limpando cache
#o seguinte comando é o responsável pela limpeza

echo 3 > /proc/sys/vm/drop_caches

Feito isto, salve o arquivo com o nome de limpacache.sh.

Sim, isto é tudo o que o seu script precisa. Com este criado, você deverá dar-lhe condições de execução. Utilize o seguinte comando:

# chmod a+x limpacache.sh

Agora que ele está pronto e com permissão de execução, agendaremos a execução do mesmo. No terminal digite:

# crontab -e

Isto abrirá um arquivo no qual você deverá fazer o agendamento de sua tarefa. No mesmo insira o seguinte conteúdo:

# mm HH DD MM DS tarefa
00 08 * * * /usr/bin/scripts/limpacache.sh
00 14 * * * /usr/bin/scripts/limpacache.sh

PS: O caminho /etc/scripts/ precisa ser configurado de acordo com o caminho utilizado por você. ;]

Pronto. Pode salvar e encerrar este aquivo.

Traduzindo as linhas do cron que utilizamos:
  • mm: minutos
  • HH: horas
  • DD: dia
  • MM: mês
  • DS: dia da semana
  • /usr/bin/scripts/limpacache.sh: tarefa a ser realizada

Feito isto, o plano está concretizado. Seu script será executado todos os dias nestes dois horários.

Sinta-se livre agora para customizar os dias e horários da maneira que for mais conveniente para você.

Abraços!

Outras dicas deste autor

Corrigindo incompatibilidade do kdemod após o "nascimento" do KDE 4.1 no Arch

Vantagem do Aptitude sobre o Apt-Get

Limpando sua memória cache de forma simples

Descubra todos os hosts que estão em sua rede com o nmap

Recuperando senhas de root com LILO ou GRUB

Leitura recomendada

Comando em máquina remota

yum-plugin-downloadonly - Baixando pacote sem instalar via YUM

dcfldd - uma alternativa ao comando dd com status do progresso

Como tirar o print de uma região da tela usando o terminal

Como listar os maiores arquivos pelo terminal

  

Comentários
[1] Comentário enviado por maran em 18/07/2008 - 12:00h

Boa, apresentou o material de um forma muito simpls, porem muito eficaz ;)

Gostei !!!!!!
Shell Script + Cron, nunca pode faltar, afinal como iriamos tirar algumas horinhas amais de descanso ;)
kkkkkkkkk

Grande Abraço

[2] Comentário enviado por kalib em 18/07/2008 - 12:03h

Huahuhauha..é sim maran...
E já pensou o que seriam de nossos backups se num fosse essa combinação??? :p
hauhauha

[3] Comentário enviado por maran em 18/07/2008 - 12:08h

hsuauhashuashusa, esta é a melhor parte ;)~

[4] Comentário enviado por Sharkypt em 18/07/2008 - 12:52h

pois eu não sei até que ponto este artigo ou o 1º estão 100% correctos. Pelas pesquisas que fiz pela net sobre este tema (à já muito tempo) eis os passos a seguir:

Tudo isto após o sistema iniciar:

1- comando serve para sincronizar memória
$ sudo sync

2- comando serve para apagar o cache sempre até ao próximo reboot
$ sudo sysctl -w vm.drop_caches=3

Este 2º comando é equivalente ao:
echo 3 > /proc/sys/vm/drop_caches

Agora até desligarem o PC ou até modificarem o drop_caches, este parâmetro estará sempre activo. Podem sim querer colocar logo isto no arranque e para isso é colocar a linha do "sysctl" num /etc/init.d/rc.local ou algo parecido...

[5] Comentário enviado por Sharkypt em 18/07/2008 - 12:56h

PS:
- o comando 'sync' só o faço porque li algures que era bom fazer antes de alterar o drop_caches :-P

"""
As this is a non-destructive operation, and dirty objects are not freeable, the user should run "sync" first in order to make sure all cached objects are freed.
"""

Já tinha sido aqui comentado isto:
* http://www.vivaolinux.com.br/dicas/verDica.php?codigo=10631

com as respectivas referências:
* http://www.linuxinsight.com/proc_sys_vm_drop_caches.html
* http://blog.krix.com.br/2008/05/13/limpando-o-cache-da-memoria/
* http://codare.net/2006/12/04/limpar-caches.../

[6] Comentário enviado por kalib em 18/07/2008 - 13:23h

O que você não entendeu ainda é a moral da história cara.. hauhuaha
Em nenhum momento eu disse que isso é algo que deva ser utilizado a torto e a direita.

Acontece que..por algum problema numa aplicação que está sendo criada aqui...a coisa vai crescendo de forma anormal no uso de memória..o que no final do dia gera problemas... e a pedidos dos prórpios desenvolvedores, adotei essa prática como forma de ajudar nos testes deles, já que eles monitoram esse crescimento anormal..como uma tentativa de saber onde tá o erro na aplicação..

Entendeu?

Foi mais algo como:

Cara...nossa aplicação tá com algum problema..estamos errando em algo. Tem uma forma de forçar essa limpeza para que possamos ficar testando?

;]

abraço

[7] Comentário enviado por Sharkypt em 18/07/2008 - 13:28h

Mas o kernel quando tem a opção drop_caches=3 faz isso automaticamente mal o programa vai para fim. Não precisas de estar a colocar no cron nada pois so estas a alterar de 3 para 3 e nao força nada...

[8] Comentário enviado por kalib em 18/07/2008 - 13:35h

Na verdade eu não estou alterando de 3 para 3...
Isso é o que você faz com o comando sysctl -w vm.drop_caches=3
No meu caso:
echo 3 > /proc/sys/vm/drop_caches
Eu estou informando que deve ser feita a limpeza do nível 3. Apenas isso..
Colocando no cron.. informa que eu o farei em tal hora.
O seu comando apenas sinalizaria que a forma de dropar o cache seria o 3..O meu faz a dropagem. ;]

[9] Comentário enviado por Sharkypt em 21/07/2008 - 06:53h

Tens razão... cada vez que "sinalizas" o valor da variável 'drop_caches', o kernel limpa o cache consoante esse mesmo valor (mesmo que seja igual). o facto de usares o 'echo' ou o 'sysctl' é igual... em baixo segue o exemplo:

sharky@hp-core:~$ cat /proc/sys/vm/drop_caches
3
sharky@hp-core:~$ free
total used free shared buffers cached
Mem: 2063268 2047644 15624 0 87548 1403580
-/+ buffers/cache: 556516 1506752
Swap: 6241244 43148 6198096

sharky@hp-core:~$ sync && sudo sysctl -w vm.drop_caches=3
vm.drop_caches = 3
sharky@hp-core:~$ free
total used free shared buffers cached
Mem: 2063268 573144 1490124 0 1164 82900
-/+ buffers/cache: 489080 1574188
Swap: 6241244 43148 6198096

[10] Comentário enviado por cleberjsantos em 23/01/2010 - 08:59h

De fato, sugiro que para quem for fazer essa limpeza coloque o sync, isso é apenas para prevenir que tenha-se perda de dados, no caso do nosso amigo Marcelo, ele fala de uma situação específica, mas ainda assim, estemos falando de um comando que não importa em que senário é, ele vai limpar o cache da máquina, o que neste caso podemos simplesmente evitar futuros problemas com simples sync ;)

No qual irá apenas sincronizar as coisas antes dessa limpeza, eviando caso ocorra alguma perda de dados!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts