Quando sua instância Mastodon fica lenta, notificações chegam com horas de atraso ou posts falham na federação, o backlog da fila Sidekiq geralmente é o culpado. Este backlog ocorre quando trabalhos em segundo plano se acumulam mais rápido que seu servidor consegue processar. Neste artigo, você aprenderá por que isso acontece, como limpar e como prevenir que se repita.
Principais Conclusões: Recuperação de um Backlog da Fila Sidekiq no Mastodon
- Painel Sidekiq em /sidekiq: Fornece profundidades de fila e contagens de repetição em tempo real para diagnosticar o backlog.
- systemctl restart mastodon-sidekiq: Reinicia todos os processos Sidekiq para limpar trabalhos travados e recolocá-los na fila.
- RAILS_ENV=production bundle exec sidekiq -q default -q push -q pull -c 15: Executa o Sidekiq manualmente com maior concorrência para drenar o backlog mais rápido.
Por que um Backlog da Fila Sidekiq se Forma na Sua Instância Mastodon
Sidekiq é o processador de trabalhos em segundo plano que lida com quase todas as tarefas assíncronas no Mastodon. Ele envia notificações, processa dados de federação de entrada e saída, gera miniaturas de mídia e atualiza timelines. Cada tipo de trabalho pertence a uma fila: default, push, pull, mailers e scheduler.
Um backlog se forma quando a taxa de trabalhos recebidos excede a capacidade de processamento dos workers Sidekiq. Gatilhos comuns incluem:
- Um pico repentino de atividade, como um post viral ou um novo usuário importando uma grande lista de contas seguidas.
- Configurações de concorrência Sidekiq insuficientes em relação à CPU e memória do servidor.
- Uma conexão lenta com o banco de dados ou Redis que faz os trabalhos expirarem e tentarem novamente, adicionando-os de volta à fila.
- Um único trabalho travado que bloqueia a fila porque o Sidekiq processa trabalhos sequencialmente por fila por padrão.
Quando o backlog cresce, novos trabalhos esperam mais tempo para serem processados. Os usuários experimentam atrasos em notificações, falhas de federação e atualizações lentas da timeline. Se não for tratado, o backlog pode causar exaustão de memória e derrubar completamente o processo Sidekiq.
Monitorando o Painel Sidekiq para Sinais de Backlog
A maneira mais rápida de confirmar um backlog é visitar o painel Sidekiq em https://sua-instancia.com/sidekiq. Se você não habilitou o painel, pode verificar a profundidade da fila via linha de comando:
redis-cli LLEN queue:default redis-cli LLEN queue:push redis-cli LLEN queue:pull
Um comprimento de fila acima de 1000 trabalhos por fila geralmente indica um backlog significativo que requer intervenção.
Recuperação Passo a Passo de um Backlog da Fila Sidekiq
O processo de recuperação envolve três fases: limpar trabalhos travados, drenar o backlog e ajustar configurações para evitar recorrência. Siga estes passos em ordem.
- Reinicie o Sidekiq para Limpar Trabalhos Travados
Conecte-se via SSH ao seu servidor Mastodon. Execute o seguinte comando para reiniciar todos os processos Sidekiq:
systemctl restart mastodon-sidekiq
Esta ação mata todos os workers Sidekiq atuais. Trabalhos travados que estavam em andamento serão recolocados na fila. Aguarde 30 segundos e verifique o painel Sidekiq para ver se a profundidade da fila diminuiu. - Execute o Sidekiq Manualmente com Maior Concorrência
Se o backlog permanecer acima de 500 trabalhos por fila, aumente a concorrência temporariamente. Navegue até o diretório de instalação do Mastodon (geralmente/home/mastodon/live) e execute:
RAILS_ENV=production bundle exec sidekiq -q default -q push -q pull -c 25
Este comando inicia um único processo Sidekiq com 25 threads em vez do padrão de 10. Ajuste o valor-ccom base nos núcleos de CPU do seu servidor. Para um servidor com 4 núcleos, use 20 a 30. Monitore a profundidade da fila a cada 60 segundos. Pare este processo com Ctrl+C assim que o backlog cair abaixo de 100 trabalhos por fila. - Limpe Repetições e Trabalhos Mortos do Painel
Abra o painel Sidekiq no seu navegador. Clique na aba Retries. Se você vir centenas de trabalhos repetidos, clique no botão Clear All. Em seguida, clique na aba Dead e clique em Clear All. Isso remove trabalhos que falharam várias vezes e continuariam tentando novamente, desperdiçando capacidade de processamento. - Verifique a Entrega de Notificações e Federação
Após o backlog ser limpo, teste a federação publicando um toot público e verificando se ele aparece em outra instância. Envie uma mensagem direta para um usuário local e confirme se ele recebe a notificação. Se os atrasos persistirem, verifique o painel Sidekiq novamente para novos backlogs na filapull, que lida com dados de federação recebidos. - Ajuste a Concorrência do Sidekiq na Configuração de Produção
Edite o arquivo de configuração do Sidekiq em/home/mastodon/live/config/sidekiq.yml. Altere o valorconcurrencypara um número que corresponda aos recursos do seu servidor. Para um servidor com 4 GB de RAM e 4 núcleos de CPU, defina a concorrência para 15 a 20. Salve o arquivo e reinicie o Sidekiq:
systemctl restart mastodon-sidekiq - Escalone Processos Sidekiq (Opcional para Instâncias Grandes)
Se sua instância tiver mais de 10.000 usuários ativos, considere executar múltiplos processos Sidekiq. Crie um arquivo de serviço systemd para um segundo processo, por exemplo/etc/systemd/system/mastodon-sidekiq-2.service, com um argumento-qdiferente. Habilite e inicie o serviço:
systemctl enable mastodon-sidekiq-2 && systemctl start mastodon-sidekiq-2
Se o Backlog Retornar ou Outros Problemas Aparecerem
Sidekiq Mostra Alto Uso de Memória Após Reinicialização
Um único processo Sidekiq com alta concorrência pode consumir mais de 1 GB de RAM. Se seu servidor tiver memória limitada, reduza o valor de concorrência em sidekiq.yml para 10 e adicione um segundo processo Sidekiq. Isso distribui a carga de memória entre dois processos.
Federação Ainda Falha Após Limpeza do Backlog
Se a federação de saída continuar quebrada, a fila push pode conter trabalhos que referenciam contas deletadas ou URLs inválidos. Use o painel Sidekiq para visualizar a fila Dead. Delete todos os trabalhos mortos e reinicie o Sidekiq. Se o problema persistir, verifique as regras de firewall da sua instância para conexões de saída na porta 443.
Exaustão de Memória Redis Causa Queda do Sidekiq
Um backlog pode encher a memória Redis com dados de trabalho. Execute redis-cli INFO memory para verificar used_memory_human. Se exceder 80% da configuração maxmemory do Redis, limpe as filas com redis-cli FLUSHDB (isso remove todos os trabalhos, então use apenas como último recurso). Em seguida, configure o Redis para usar a política de evicção allkeys-lru em /etc/redis/redis.conf.
| Item | Reiniciar Sidekiq | Execução Manual com Alta Concorrência |
|---|---|---|
| Propósito | Limpar trabalhos travados e redefinir workers | Drenar backlog grande mais rápido que as configurações padrão permitem |
| Efeito nas filas | Recoloca todos os trabalhos em andamento na fila | Processa trabalhos a até 25x a taxa normal |
| Risco | Mínimo; trabalhos não são perdidos | Alto uso de memória se a concorrência for muito alta |
| Melhor para | Backlogs abaixo de 1000 trabalhos por fila | Backlogs acima de 5000 trabalhos por fila |
Agora você pode identificar um backlog da fila Sidekiq, limpá-lo usando o painel Sidekiq ou linha de comando e ajustar as configurações de concorrência para evitar atrasos futuros. Para backlogs persistentes, considere dividir o Sidekiq em múltiplos processos ou atualizar os recursos do servidor. Como dica avançada, configure um alerta de monitoramento com Prometheus e o sidekiq_exporter para notificá-lo quando qualquer fila exceder 500 trabalhos.