Melhorias de performance para o Redis | Tunnig Redis

Recentemente precisei realizar uma melhoria no Redis que utilizo por estar consumindo muita CPU e estar um pouco instável, inclusive tomando alguns erros no lado da aplicação. Confesso que nunca estudei a fundo o Redis, ele nasceu na empresa onde eu trabalho de maneira bem discreta e foi tomando proporções bem grandes, a ponto de que uma lentidão gerar bastante caos para os usuários.

Sendo assim, vou deixar registrado aqui um compilado das principais mudanças que realizei no meu Redis, não tome como verdade absoluta e saia configurando o seu, a cada ajuste realize um teste de carga se possível e verifique se não vai mais prejudicar do que ajudar, caso não ache necessário um teste de carga, realizei as mudanças aos poucos e anote como estava antes para um eventual rollback.

Ajustes de memória

Desabilite o THP – Transparent Huge Page

echo never > /sys/kernel/mm/transparent_hugepage/enabled

Antes você pode checar como está configurado executando:

cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never

Habilite o overcommit_memory

Dessa forma você evita que o Redis sofra com falta de memória. Como anteriormente, você pode verificar como está configurado antes de alterar:

cat /proc/sys/vm/overcommit_memory
1

Note que está setado como 1, então nesse caso nao farei nada, se o seu caso for diferente, sete como:

echo 1 > /proc/sys/vm/overcommit_memory
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf #para salvar permanentemente

Ajuste o Swappiness

O Redis utiliza muita memória e se começar a fazer muito Swap terá seu desempenho afetado. Para ajustar isso vamos ajustar o Swap, veja como está por padrão no meu caso:

cat /proc/sys/vm/swappiness
60

Ajustando, ficará assim:

echo 1 > /proc/sys/vm/swappiness
echo 'vm.swappiness = 1' >> /etc/sysctl.conf #para salvar permanentemente

Limite de memória para o Redis

Se você não definir o limite de memória que o seu Redis deverá utilizar, ele utilizará toda a memória disponível no seu servidor, por isso é bom setar um limite para ele.

No seu arquivo de configuração redis.conf. Procure pelo parâmetro: maxmemory, meu servidor possui 32GB de memória, vou colocar 24GB para uso do Redis. Veja abaixo:

maxmemory 24GB

Ajuste de rede

Um método utilizado para que uma conexão TCP seja mantida “viva” para aceitar novas conexões, ao invés de fechar e abrir uma nova sempre que vier uma requisição é o Keepalive. Ajuste no redis.conf:

tcp-keepalive 0

Desabilitando persistência me disco

Caso você não precise que o Redis salve nada no seu disco, desabilite esse recurso, para isso, no redis.conf comente as linhas abaixo:

#save 900 1
#save 300 10
#save 60 10000

Altere o maxclients

Se o seu Redis estiver com muitos clientes conectados, você poderá tomar alguns erros no log como: “max number of clients reached”, por isso você pode subir o valor que está setado no redis.conf

maxclients 10000

Altere conforme seu cenário.

Considerações

Redis é uma baita solução para desafogar aplicações, tem casos e casos que ele pode ser utilizado para manter cache de objetos. Esses parâmetros que coloquei nesse post foram alguns que encontrei pela internet e fiz um pequeno compilado. Espero que os ajudem.

Deixe um comentário

O seu endereço de e-mail não será publicado.