Cache de Objetos de Federação do Mastodon: Como Ajustar para Eficiência de Memória
🔍 WiseChecker

Cache de Objetos de Federação do Mastodon: Como Ajustar para Eficiência de Memória

Quando sua instância do Mastodon cresce, o cache de objetos de federação pode consumir RAM em excesso. Esse cache armazena postagens remotas, perfis e metadados de mídia de outras instâncias. Sem ajustes, pode causar erros de falta de memória ou forçar o servidor a usar swap intensamente. Este artigo explica o que é o cache de objetos de federação, por que ele cresce e como ajustar suas configurações para melhor eficiência de memória.

Principais Conclusões: Ajustando o Cache de Objetos de Federação do Mastodon

  • Variável de ambiente CACHE_TTL: Controla por quanto tempo os objetos permanecem no cache antes de serem removidos.
  • Variável de ambiente CACHE_SIZE: Define o número máximo de objetos que o cache pode armazenar.
  • Reinicie os serviços do Mastodon: Necessário após alterar as variáveis de ambiente para que os novos valores entrem em vigor.

ADVERTISEMENT

O Que o Cache de Objetos de Federação Faz e Por Que Consome Memória

O cache de objetos de federação armazena dados de servidores remotos com os quais sua instância interagiu. Isso inclui status, contas, anexos de mídia e objetos de atividade. Quando um usuário da sua instância visualiza uma postagem remota, o Mastodon busca esses dados e os armazena em cache localmente. O cache evita requisições de rede repetidas para o mesmo objeto. Sem cache, cada visualização de uma postagem remota exigiria uma nova requisição HTTP ao servidor de origem.

O cache usa RAM para armazenar esses objetos. Em uma instância movimentada que federada com muitos servidores, o cache pode crescer para vários gigabytes. O Mastodon usa uma política de remoção de itens menos usados recentemente por padrão. Quando o cache atinge seu limite de tamanho, ele remove os objetos menos acessados. No entanto, se o limite for muito alto ou o tempo de vida for muito longo, objetos antigos permanecem na memória e desperdiçam espaço.

As duas principais opções de configuração são CACHE_TTL e CACHE_SIZE. Ambas são variáveis de ambiente definidas no arquivo de configuração do Mastodon ou no arquivo de unidade do systemd. CACHE_TTL define a idade máxima em segundos que um objeto pode permanecer no cache. CACHE_SIZE define o número máximo de objetos que o cache pode armazenar. Ajustar esses valores reduz o consumo de memória sem quebrar a federação.

Passos para Ajustar o Cache de Objetos de Federação

Antes de fazer alterações, verifique o uso atual do cache. Conecte-se ao seu servidor via SSH e execute o seguinte comando para ver o tamanho atual do cache:

redis-cli info memory | grep used_memory_human

Isso mostra a memória total usada pelo Redis, que inclui o cache de objetos de federação. Se esse valor for superior a 70% da RAM do servidor, é recomendável ajustar. Os passos abaixo pressupõem que você tenha acesso root ou sudo ao servidor Mastodon.

  1. Localize o arquivo de ambiente do Mastodon
    O arquivo de ambiente geralmente está em /home/mastodon/live/.env.production ou /etc/mastodon/mastodon.env. Abra-o com um editor de texto como nano ou vim.
  2. Defina a variável CACHE_TTL
    Adicione ou modifique a linha: CACHE_TTL=3600. Isso define o tempo de vida para uma hora. Valores TTL mais curtos, como 1800 segundos, liberam memória mais rápido, mas aumentam as requisições de rede. Valores TTL mais longos reduzem as requisições de rede, mas consomem mais RAM.
  3. Defina a variável CACHE_SIZE
    Adicione ou modifique a linha: CACHE_SIZE=5000. Isso limita o cache a 5.000 objetos. Para instâncias pequenas com menos de 1.000 usuários ativos, 2.000 objetos geralmente são suficientes. Para instâncias maiores, comece com 10.000 e monitore o uso de memória.
  4. Salve o arquivo e saia do editor
    Se estiver usando nano, pressione Ctrl+O para salvar e depois Ctrl+X para sair. Se estiver usando vim, pressione Escape, digite :wq e pressione Enter.
  5. Reinicie os serviços do Mastodon
    Execute os seguintes comandos para reiniciar os processos web e de streaming:
    systemctl restart mastodon-web
    systemctl restart mastodon-streaming
    Se sua instância usar sidekiq, execute também: systemctl restart mastodon-sidekiq
  6. Verifique se as alterações foram aplicadas
    Verifique os logs em busca de erros: journalctl -u mastodon-web -n 20. Em seguida, monitore novamente o uso de memória do Redis: redis-cli info memory | grep used_memory_human. O valor deve diminuir nas próximas horas à medida que objetos antigos expiram.

ADVERTISEMENT

Erros Comuns e Coisas a Evitar ao Ajustar o Cache

Definir CACHE_TTL muito curto quebra a confiabilidade da federação

Se você definir CACHE_TTL como 300 segundos, os objetos expiram em cinco minutos. Usuários que rolarem para trás mais de cinco minutos verão mídia quebrada ou informações de perfil ausentes. A instância precisará buscar os dados novamente, causando atrasos. Um TTL abaixo de 1800 segundos não é recomendado para instâncias de produção.

Definir CACHE_SIZE muito baixo causa remoções frequentes

Se você definir CACHE_SIZE como 500 objetos, o cache remove objetos rapidamente. Isso aumenta a carga nos servidores de origem e retarda o carregamento da timeline dos seus usuários. Comece com um valor que corresponda à média diária de objetos remotos únicos da sua instância. Você pode estimar isso executando redis-cli dbsize e dividindo por 7 para uma média semanal.

Alterar variáveis de ambiente sem reiniciar os serviços

O Mastodon lê as variáveis de ambiente apenas na inicialização. Editar o arquivo não entra em vigor até que os processos web, streaming e sidekiq sejam reiniciados. Pular a etapa de reinicialização mantém as configurações antigas do cache ativas.

Ignorar a política maxmemory do Redis

Mesmo com variáveis do Mastodon ajustadas, o próprio Redis pode ter uma configuração maxmemory que substitui o tamanho do cache. Execute redis-cli config get maxmemory. Se o valor for 0, o Redis pode usar toda a RAM disponível. Defina um valor maxmemory do Redis que deixe pelo menos 1 GB livre para o sistema operacional. Por exemplo, em um servidor com 8 GB de RAM, defina maxmemory 7gb no arquivo de configuração do Redis.

Comparação de Opções de Ajuste do Cache de Objetos de Federação do Mastodon

Item Ajuste Conservador Ajuste Agressivo
Valor de CACHE_TTL 7200 (2 horas) 3600 (1 hora)
Valor de CACHE_SIZE 20000 objetos 5000 objetos
Redis maxmemory 80% da RAM do servidor 60% da RAM do servidor
Economia de memória esperada Redução de 10-20% Redução de 30-50%
Risco de conteúdo remoto quebrado Baixo Médio

Agora você pode ajustar o cache de objetos de federação do Mastodon para reduzir o uso de memória enquanto mantém a federação confiável. Comece definindo CACHE_TTL=3600 e CACHE_SIZE=5000 em uma instância de teste primeiro. Monitore o uso de memória do Redis por 48 horas antes de aplicar os mesmos valores em produção. Para ajustes avançados, combine essas configurações com um limite maxmemory do Redis e ative a política de remoção allkeys-lru para controlar ainda mais o consumo de memória.

ADVERTISEMENT