Erro de Acúmulo na Fila do Sidekiq no Mastodon: Como Limpar
🔍 WiseChecker

Erro de Acúmulo na Fila do Sidekiq no Mastodon: Como Limpar

Ao gerenciar uma instância do Mastodon, o Sidekiq processa tarefas em segundo plano como entregar publicações para servidores remotos, enviar notificações e atualizar timelines. Um backlog ocorre quando o número de jobs na fila excede a capacidade de processamento do Sidekiq, causando atrasos na federação, notificações perdidas e atualizações lentas. Este artigo explica por que o backlog acontece e fornece métodos passo a passo para limpá-lo com segurança. Você aprenderá a monitorar o tamanho da fila, reiniciar workers e purgar jobs travados sem perder dados importantes.

Principais Conclusões: Como Limpar o Backlog da Fila do Sidekiq no Mastodon

  • Interface web do Sidekiq em /sidekiq: Monitore o tamanho da fila, retentativas e jobs mortos em tempo real.
  • systemctl restart mastodon-sidekiq: Reinicie todos os workers do Sidekiq para limpar travamentos temporários.
  • Sidekiq::Queue.new.clear no console Rails: Purgue todos os jobs pendentes de uma fila específica quando a reinicialização não ajudar.

ADVERTISEMENT

Por que o Backlog da Fila do Sidekiq Ocorre em uma Instância Mastodon

O Sidekiq usa múltiplas threads workers para processar jobs das filas Redis. As filas padrão são default, push, pull, mailers e scheduler. Um backlog se acumula quando a taxa de chegada de jobs excede a taxa de processamento. Causas comuns incluem um pico repentino de atividade federada após uma publicação popular, número insuficiente de workers para o tamanho da instância, um banco de dados lento ou link de rede para servidores remotos, e um job travado que bloqueia a fila. Quando um job falha repetidamente, o Sidekiq o move para a fila de retentativas e eventualmente para a fila de mortos após esgotar as tentativas. Se a fila de mortos não for limpa, ela acumula e contribui para o backlog. O backlog também cresce quando o processo do Sidekiq trava ou é morto sem finalizar graciosamente seu trabalho.

Como a Prioridade da Fila Afeta o Backlog

O Mastodon atribui prioridades diferentes às filas. A fila push entrega atividades de saída para instâncias remotas. A fila pull busca dados de instâncias remotas. A fila default lida com tarefas como geração de preview de links e processamento de mídia. Quando a fila push acumula, suas publicações chegam atrasadas ou não chegam aos seguidores em outras instâncias. Quando a fila pull acumula, sua timeline local e notificações de contas remotas ficam desatualizadas. Entender qual fila está sobrecarregada ajuda a direcionar a correção correta.

Passos para Limpar o Backlog da Fila do Sidekiq no Mastodon

Antes de limpar o backlog, verifique o tamanho atual da fila usando a interface web do Sidekiq ou a linha de comando. Em seguida, aplique o método que corresponde à sua situação. Sempre faça backup dos dados do Redis antes de purgar filas.

Método 1: Reiniciar os Workers do Sidekiq

  1. Abra uma sessão de terminal no seu servidor Mastodon
    Faça login via SSH como um usuário com privilégios sudo.
  2. Verifique o tamanho atual da fila
    Execute systemctl status mastodon-sidekiq para ver o estado do processo e as linhas de log recentes. Use redis-cli -n 0 LLEN queue:push para verificar o comprimento da fila push. Substitua push pelo nome da fila que deseja inspecionar.
  3. Reinicie o serviço Sidekiq
    Execute sudo systemctl restart mastodon-sidekiq. Isso mata todos os processos workers existentes e inicia novos. O comando leva alguns segundos para ser concluído.
  4. Monitore a fila após a reinicialização
    Execute redis-cli -n 0 LLEN queue:push novamente. Se o comprimento da fila diminuir no próximo minuto, o backlog está sendo limpo. Aguarde cinco minutos e verifique novamente.

Método 2: Purgar Todos os Jobs de uma Fila Específica Usando o Console Rails

Se a reinicialização não reduzir o tamanho da fila, você pode purgar todos os jobs pendentes de uma fila. Este método exclui jobs sem processá-los. Use-o apenas quando entender que jobs não processados serão perdidos.

  1. Abra o console Rails
    Execute cd /home/mastodon/live e depois RAILS_ENV=production bin/rails console como o usuário mastodon.
  2. Selecione a fila a ser limpa
    Digite queue = Sidekiq::Queue.new("push") e pressione Enter. Substitua push pelo nome da fila que deseja limpar.
  3. Verifique o número de jobs pendentes
    Digite queue.size para confirmar o tamanho do backlog.
  4. Limpe todos os jobs da fila
    Digite queue.clear e pressione Enter. A saída mostra o número de jobs removidos.
  5. Verifique se a fila está vazia
    Digite queue.size novamente. Deve retornar 0. Saia do console digitando exit.

Método 3: Limpar a Fila de Jobs Mortos

Jobs mortos são aqueles que esgotaram todas as retentativas. Eles permanecem na fila de mortos e contam para o backlog total. Para limpá-los:

  1. Abra o console Rails
    Siga os mesmos passos do Método 2 para entrar no console.
  2. Acesse o conjunto de mortos
    Digite ds = Sidekiq::DeadSet.new.
  3. Verifique a contagem de jobs mortos
    Digite ds.size.
  4. Limpe todos os jobs mortos
    Digite ds.clear. A saída mostra o número de jobs mortos removidos.
  5. Saia do console
    Digite exit.

ADVERTISEMENT

Se o Backlog Retornar Após a Limpeza

Um backlog recorrente indica um problema sistêmico, não um pico isolado. Resolva a causa raiz para evitar problemas futuros.

Backlog da Fila do Sidekiq Retorna Imediatamente Após Reinicialização

Se a fila encher novamente em segundos, um único job travado pode estar sendo reenfileirado repetidamente. Use a interface web do Sidekiq em https://suainstancia.exemplo.com/sidekiq para encontrar jobs com altas contagens de retentativas. Clique no ID do job e veja sua mensagem de erro. Erros comuns incluem timeouts de rede para um servidor remoto específico ou falhas de conexão com o banco de dados. Exclua ou tente novamente esse job específico pela interface.

Alto Uso de Memória pelos Workers do Sidekiq

Cada worker do Sidekiq consome memória. Se sua instância tiver muitos workers configurados, o sistema fica sem RAM e mata processos. Verifique a configuração do Sidekiq em /home/mastodon/live/config/sidekiq.yml. Reduza o valor de concurrency para 5 ou 10 em instâncias pequenas. Reinicie o Sidekiq após alterar a configuração.

Lentidão do Banco de Dados Causa Crescimento da Fila

Jobs do Mastodon que escrevem no banco de dados, como criar notificações ou atualizar contas, aguardam consultas ao banco. Se o PostgreSQL estiver sobrecarregado, os jobs expiram e tentam novamente. Verifique o desempenho do banco com pg_top ou htop. Adicione índices em colunas consultadas com frequência ou aumente as configurações de memória do banco em postgresql.conf.

Backlog da Fila do Sidekiq vs Alta Contagem de Retentativas: Principais Diferenças

Item Backlog na Fila Alta Contagem de Retentativas
Definição Jobs pendentes aguardando processamento Jobs que falharam e estão agendados para retentativa
Localização na interface do Sidekiq Aba Queues Aba Retries
Causa principal Muitos jobs chegando muito rápido Erros persistentes em jobs individuais
Melhor correção Reiniciar workers ou aumentar o número de workers Excluir ou corrigir o job com falha
Risco de perda de dados Baixo se reiniciar rapidamente Baixo se corrigir o erro subjacente

Após limpar o backlog, monitore as filas do Sidekiq por pelo menos 24 horas. Configure uma ferramenta de monitoramento como Prometheus com o exportador do Sidekiq para alertá-lo quando o tamanho da fila exceder um limite. Para backlogs persistentes, considere adicionar mais processos Sidekiq aumentando o valor de concurrency no sidekiq.yml ou executando múltiplas unidades de serviço systemd. Sempre teste as mudanças de configuração em uma instância de staging primeiro.

ADVERTISEMENT