Marcelo Cavalcante
Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

Parte II – Limpando memória cache de forma automatizada

by kalib on Jul.14, 2008, under Linux, redes, software livre

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

B
om, utilizo isto para o servidor que citei no artigo anterior, utilizado pelos nossos amigos desenvolvedores Java. ;] Nada pessoal eim?!

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, iremos agendar 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 substituido 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 o script criado, você deverá agora lhe dar 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, iremos agendar a execução do mesmo. No terminal digite:

# crontab -e

Isto irá 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 o comando 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

8 Comments for this entry

  • Manabu

    http://www.linuxinsight.com/proc_sys_vm_drop_caches.htmlBR/BR/Ai está dizendo que é necessário executar o comando sync antes disso. E também o que eu já tinha dito: “this tunable was never supposed to be used on production systems as an additional optimization, but rather as a tool for people doing various benchmarks and tests.”BR/BR/Acúmulo de cache do kernel só aumenta a performance do sistema, e não causa nenhum desastre no final do dia. Não seriam memory leaks do programa java, ou seja, erros no programa?BR/BR/http://www.ibm.com/developerworks/java/library/j-leaks/

  • kalib

    Sim amigo..de fato…BR/Mas acho que você não leu muito bem meu primeiro tópico sobre isso..BR/Eu disse que eu resolvi utilizar aqui por que de alguma forma..os desenvolvedores java estavam cometendo algum erro no sistema deles…não sou do setor de desenvolvimento java…então não cabe a mim corrigir..a falha foi relatada…e estavam em busca da causa..mas até então..me foi perguntado se seria possível fazer isto..esta limpeza forçada…e eu disse que sim..BR/Apenas passei aí o procedimento utilizado..não estou dizendo em parte alguma que deve ser usada no dia a dia de um desktop.. Mas sim, caso necessário…como foi o meu caso. ;]BR/BR/abraço

  • Manabu

    Bem, se isso não só libera a memória, mas também realmente melhora a performance e evita o desastre no final do dia, então tudo bem. BR/BR/Mas não estou nem entendendo como essa gambiarra pode funcionar, já que toda a memória liberada é memória que seria automaticamente liberada pelo kernel quando precisasse. BR/BR/Se é para evitar o uso da swap em disco, então há outro parâmetro mais útil, como também dito naquele link: swappiness.

  • kalib

    Bingo…é para evitar um desastre ao final do dia sim..BR/Por se tratar de um servidor com o único propósito atualmente de teste de uma nova aplicação desta equipe de java..é o dia todo em testes de performance da aplicação..erros..correção..etc..E ela está com esse problema…de alguma forma..ele vai comendo memória…e crescendo, até então, sem explicação..a memória em cache vai se acumulando de forma que não se pode explicar…já que no final do dia ela estaria por exemplo com cerca de 4 gigas armazenados em cache….dentre outros problemas… justamente a pedidos deles..a nível de testes…até que se descubra onde no sistema exatamente está ocorrendo isso… tomamos esta atitude..já que a mesma não estava sendo liberada..como deveria ser normalmente, como vc mesmo disse.

  • Manabu

    Tá, mas esses 4GB em cache acabam causando o travamento do sistema? Ou uma grande lentidão? Isso que eu entendi por desastre no final do dia.BR/BR/Se o servidor tem 8GB de memória, BR/o cache irá crescer até usar toda a memória, e só a partir dai que o kernel vai começar a apagar coisa do cache para liberar para conteudo novo. BR/BR/Enquanto tiver memória ociosa, ele vai usar essa memória. Pode ser esteticamente ruim, mas em teoria não cria problemas, só potencialmente aumenta a performance.

  • kalib

    Exato..supostamente ele deveria se comportar dessa forma..liberar quando atingir o limite..mas e quando isso não acontece?? Entende?!?! É isso que chamo de catástrofe…BR/Já tentamos..como o servidor fica ligado por 24 horas..ele lotava a memória..e mesmo parado..durante a noite inteira…sem nenhum usuário logado.. chegava o dia seguinte..e tava tudo estourando denovo… enfim..aí ajudei eles nesse sentido de forma que eles possam ver o que ocasiona isso.BR/BR/Fica com uma lentidão enoormeee..

  • Anonymous

    Deixe então mais explícito que isto é pra não travar um servidor de teste java q os programadores enchem de leaks….BR/BR/E ñ faz o sistema ficar mais rápido. Pelo contrário aliás.

  • Marcelo

    Olá!

    Sei que o post é bastante antigo, mas creio que esse problema ocorre em distribuições derivadas do RHEL.

    Passei por esse mesmo problema no CentoOS e a falha ocorria por causa da compilação do Apache http.

    Bom…mudei para Ubuntu 9.10 e esses problemas não mais ocorreram.

    Um abraço,
    Marcelo

Leave a Reply

Procurando por algo?

Use o formulário para buscar em minha página:

Continua sem achar o que procura? Deixe um comentário em algum post ou me envie um email para que eu possa cuidar disso!