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.