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.
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
- Abra uma sessão de terminal no seu servidor Mastodon
Faça login via SSH como um usuário com privilégios sudo. - Verifique o tamanho atual da fila
Executesystemctl status mastodon-sidekiqpara ver o estado do processo e as linhas de log recentes. Useredis-cli -n 0 LLEN queue:pushpara verificar o comprimento da fila push. Substitua push pelo nome da fila que deseja inspecionar. - Reinicie o serviço Sidekiq
Executesudo systemctl restart mastodon-sidekiq. Isso mata todos os processos workers existentes e inicia novos. O comando leva alguns segundos para ser concluído. - Monitore a fila após a reinicialização
Executeredis-cli -n 0 LLEN queue:pushnovamente. 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.
- Abra o console Rails
Executecd /home/mastodon/livee depoisRAILS_ENV=production bin/rails consolecomo o usuário mastodon. - Selecione a fila a ser limpa
Digitequeue = Sidekiq::Queue.new("push")e pressione Enter. Substitua push pelo nome da fila que deseja limpar. - Verifique o número de jobs pendentes
Digitequeue.sizepara confirmar o tamanho do backlog. - Limpe todos os jobs da fila
Digitequeue.cleare pressione Enter. A saída mostra o número de jobs removidos. - Verifique se a fila está vazia
Digitequeue.sizenovamente. Deve retornar 0. Saia do console digitandoexit.
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:
- Abra o console Rails
Siga os mesmos passos do Método 2 para entrar no console. - Acesse o conjunto de mortos
Digiteds = Sidekiq::DeadSet.new. - Verifique a contagem de jobs mortos
Digiteds.size. - Limpe todos os jobs mortos
Digiteds.clear. A saída mostra o número de jobs mortos removidos. - Saia do console
Digiteexit.
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.