Drops :: Limpando memória do Memcached manualmente

Share:
Créditos: Rawpixel 
O Memcached é um poderoso servidor de cache que trabalha na lógica de "chave e valor" e executa o store dos itens diretamente em memória. Ele é extremamente rápido, mas peca em opções de inteligência e auto gerenciamento por isso é comum alguns problemas de performance surgirem por conta do esgotamento da memória disponível para o serviço, e reiniciar o servidor para liberação da memória pode ser muito prejudicial para a aplicação em si, gerando uma indisponibilidade muito grande e por um significativo período de tempo.

Nesse "Drops",  quadro de posts que eu acabei de inventar para informar dicas rápidas de administração de serviços e alguns truques "salva vida", vou mostrar como zerar a memória do servidor de memcached manualmente sem precisar o reboot de nenhum node do cluster.


Iniciando a brincadeira 

Para realizar uma conexão direta com o Memcached, nada melhor que o nosso amigo Netcat. É só passar o endereço IP ou DNS do servidor do memcached em caso de estar em um ambiente AWS e a porta 11211 e pronto, estamos conectados via uma conexão TCP simples ao serviço.


nc ip-do-memcached porta-do-memcached
nc 127.0.0.1 11211

Para dar um contexto maior a esse teste, esterei rodando um container limpo de memcached. Vou criar um registro em memória com a chave "hello" com o valor "world".


echo -e 'set hello 0 60 5\r\nworld\r' | nc 127.0.0.1 11211
echo -e 'get hello\r' | nc 127.0.0.1 11211



Para verificar se existem itens na memória do Memcached, vamos executar o comando `stats items` via Netcat. Ele é responsavel por fornecer um relatório completo do estado dos itens cacheados.


echo -e 'stats items' | nc 127.0.0.1 11211



Zerando os itens em memória do Memcached sem reiniciar o cluster 

O memcached deixa um pouco a desejar no quesito de recycle quando a memória das máquinas do cluster lotam, e reiniciar uma máquina de memcached pode gerar indisponibilidade e lentidão na aplicação caso o mesmo sirva para cachear itens críticos para o usuário, como sessions, itens de carrinho e etc.

Para zerar a memória TODA do memcached manualmente, podemos enviar o comando flush_all via socket TCP aberto pelo Netcat


echo "flush_all" | nc 127.0.0.1 11211


Espero ter ajudado! :D

Nenhum comentário