Instâncias Mastodon dependem muito do Redis como cache de alta velocidade e fila de jobs para o Sidekiq. Quando o limite de memória do Redis é muito baixo, jobs do Sidekiq falham silenciosamente ou são removidos, causando posts federados atrasados ou perdidos, falhas de notificação e lacunas na timeline. Este guia explica como a alocação de memória Redis interage com as filas do Sidekiq e fornece etapas concretas para ajustar a configuração maxmemory para sua instância Mastodon. Ao final, você saberá como calcular um limite seguro de memória, aplicar a configuração e verificar se as filas do Sidekiq permanecem estáveis.
Principais Conclusões: Ajuste de Memória Redis para Mastodon Sidekiq
- Diretiva maxmemory no /etc/redis/redis.conf: Define o teto absoluto de memória que o Redis usará para todas as chaves, incluindo filas do Sidekiq e dados de federação em cache.
- Política de despejo allkeys-lru: Remove as chaves menos usadas recentemente quando a memória está cheia, evitando perda de jobs do Sidekiq enquanto mantém dados ativos recentes.
- Comando redis-cli INFO memory: Exibe o used_memory atual, maxmemory e contagens de despejo para verificar a eficácia do ajuste.
Por que a Memória Redis é Importante para a Estabilidade das Filas do Sidekiq
O Mastodon usa Redis para dois propósitos principais: armazenar em cache conteúdo remoto, como perfis de usuário e metadados de mídia, e como backend para as filas de jobs do Sidekiq. O Sidekiq envia jobs para cada ação federada: publicar um status, seguir um usuário, impulsionar um toot e entregar atividade para instâncias remotas. Cada job ocupa uma pequena quantidade de memória no Redis. Quando o uso total de memória atinge o limite maxmemory, o Redis precisa remover chaves de acordo com sua política de despejo. Se a política for noeviction, o Redis retorna erros ao Sidekiq e os jobs são perdidos. Se a política for allkeys-lru ou volatile-lru, o Redis remove as chaves menos usadas recentemente. Isso pode incluir entradas da fila do Sidekiq se o cache estiver cheio, levando a atrasos ou pulos no processamento de jobs.
A configuração padrão do Redis em muitas distribuições Linux define maxmemory como 0, o que significa sem limite. Em instâncias pequenas com RAM limitada, isso pode fazer o sistema usar swap ou ficar sem memória completamente. Em instâncias grandes, um Redis sem limites pode consumir toda a RAM disponível, deixando espaço insuficiente para o sistema operacional ou outros serviços. Um valor maxmemory ajustado corretamente previne ambos os cenários, reservando espaço suficiente para as filas do Sidekiq enquanto limita o crescimento do cache Redis.
Como o Sidekiq Usa a Memória Redis
O Sidekiq armazena payloads de jobs como strings JSON em listas Redis. Cada job normalmente consome de 1 a 5 KB, dependendo do tamanho dos argumentos serializados. Para uma instância Mastodon com 10.000 usuários ativos, o Sidekiq pode conter dezenas de milhares de jobs a qualquer momento. Além disso, o Sidekiq usa uma chave Redis separada para cada fila, conjunto de retry e conjunto de jobs agendados. A soma dessas chaves pode chegar a várias centenas de megabytes. A memória Redis restante é usada para cache de objetos remotos, que pode crescer rapidamente em instâncias federadas. O ajuste deve considerar tanto o conjunto de trabalho do Sidekiq quanto o conjunto de trabalho do cache.
Passos para Ajustar a Memória Redis para Filas do Sidekiq
Siga estes passos para calcular, aplicar e verificar um limite seguro de memória Redis para sua instância Mastodon. Todos os comandos exigem acesso root ou sudo no servidor Mastodon.
- Meça o uso atual de memória Redis
Executeredis-cli INFO memory | grep -E 'used_memory_human|maxmemory_human'no servidor Mastodon. Anote o valor used_memory_human. Isso mostra quanta memória o Redis está usando atualmente. Se maxmemory_human mostrar 0, nenhum limite está definido. - Determine a RAM total do sistema
Executefree -hpara ver a RAM total e disponível. Reserve pelo menos 1 GB para o sistema operacional e outros serviços. Para uma instância Mastodon rodando PostgreSQL e servidor web, reserve no mínimo 2 GB. A RAM restante pode ser alocada para o Redis. - Calcule um valor seguro para maxmemory
Defina maxmemory como 60 a 75 por cento da RAM total do sistema, menos o valor reservado. Por exemplo, em um servidor com 8 GB de RAM e uma reserva de 2 GB: disponível para Redis = 6 GB. Use 4 GB como maxmemory para deixar margem. Escreva esse valor em megabytes: 4096 MB. - Edite o arquivo de configuração do Redis
Abra/etc/redis/redis.confcom um editor de texto como root. Encontre a linha# maxmemory. Descomente-a e defina o valor:maxmemory 4096mb. Certifique-se de que a unidade está em minúsculasmb. - Defina a política de despejo
No mesmo arquivo, encontre# maxmemory-policy noeviction. Altere paramaxmemory-policy allkeys-lru. Essa política remove as chaves menos usadas recentemente em todos os bancos de dados Redis, mantendo os jobs e entradas de cache mais ativos do Sidekiq. - Reinicie o Redis
Executesudo systemctl restart redispara aplicar as alterações. Verifique se o Redis está rodando comsudo systemctl status redis. - Verifique o novo limite de memória
Executeredis-cli INFO memory | grep -E 'used_memory_human|maxmemory_human'novamente. Confirme que maxmemory_human corresponde ao valor configurado. Executeredis-cli INFO stats | grep evicted_keyspara ver a contagem de despejos. Uma contagem baixa ou zero indica que o limite é suficiente. - Monitore a saúde das filas do Sidekiq
Abra a interface web do Sidekiq emhttps://sua-instancia.exemplo.com/sidekiq. Verifique a aba Queues para crescimento de backlog. Se as filas crescerem mais rápido do que são processadas, considere aumentar o maxmemory ou reduzir o TTL do cache nas configurações do Mastodon.
Erros Comuns na Configuração de Memória Redis
Redis Não Reinicia Após Alteração na Configuração
Se o Redis falhar ao reiniciar após editar o redis.conf, a causa mais comum é um erro de sintaxe no arquivo de configuração. Execute sudo redis-server /etc/redis/redis.conf --check-config para validar o arquivo. Certifique-se de que o valor maxmemory usa uma unidade válida: mb, gb ou bytes simples. Remova espaços extras no final.
Jobs do Sidekiq Ainda Falhando Após o Ajuste
Se o Sidekiq continuar reportando erros de job, verifique a contagem de despejos do Redis com redis-cli INFO stats | grep evicted_keys. Uma alta taxa de despejo significa que o maxmemory ainda está muito baixo. Aumente o valor em 25 por cento e reinicie o Redis. Alternativamente, reduza o TTL do cache Redis no Mastodon definindo CACHE_TTL = 600 no .env.production para expirar objetos remotos em cache mais rapidamente.
Redis Usando Mais Memória que o Limite
O Redis aplica o limite maxmemory de forma assíncrona. Durante picos de escrita, a memória pode exceder temporariamente o limite. Isso é normal e o Redis removerá chaves no próximo ciclo de manutenção. Se o excesso persistir, aumente o maxmemory em 10 por cento.
Estratégias de Alocação de Memória Redis: Limite Fixo vs Alocação Dinâmica
| Item | Limite Fixo (maxmemory) | Alocação Dinâmica (sem limite) |
|---|---|---|
| Controle de memória | Teto explícito impede uso descontrolado | Redis usa toda RAM disponível até OOM |
| Confiabilidade do Sidekiq | Jobs protegidos pela política de despejo LRU | Jobs podem ser perdidos se o sistema ficar sem memória |
| Ajuste de desempenho | Requer monitoramento e ajuste periódico | Nenhuma configuração necessária, mas risco de swap |
| Melhor para | Instâncias de produção com tráfego previsível | Instâncias de desenvolvimento ou pessoais muito pequenas |
A abordagem de limite fixo é fortemente recomendada para qualquer instância Mastodon que atenda mais de um usuário. Ela fornece uso de memória previsível e impede que o servidor inteiro se torne instável. A alocação dinâmica pode funcionar para instâncias de usuário único com RAM abundante, mas corre o risco de mortes OOM durante picos de federação.
Após o ajuste, você pode evitar a perda de jobs do Sidekiq definindo um maxmemory calculado e a política de despejo allkeys-lru no /etc/redis/redis.conf. Monitore used_memory e evicted_keys semanalmente para detectar tendências de crescimento. Para monitoramento avançado, considere adicionar a ferramenta redis-stat ou o exportador Prometheus Redis à sua instância. Revise regularmente as configurações de TTL do cache do Mastodon para manter o conjunto de trabalho Redis alinhado com os recursos do servidor.