Sidekiq continua reiniciando, como solucionar?

Olá,

Estamos executando um servidor Discourse multi-domínio com dois contêineres há cerca de 4 anos e hospedamos cerca de 20 domínios. Realizamos atualizações regulares com sucesso. No entanto, percebemos no início de outubro (a partir de 8 a 10 de outubro), provavelmente após uma atualização do Discourse, que os e-mails de inscrição não estavam sendo enviados. Notamos que a tarefa do Sidekiq não está em execução e que o Sidekiq continua reiniciando.

A única diferença com as migrações regulares que realizamos é que desta vez tive que alterar manualmente todos os bancos de dados Postgres para ativar a extensão vector mais recente; parece que o script de atualização só faria isso no banco de dados principal, discourse.

Sintomas:

  1. Os logs mostram que o Sidekiq reinicia a cada poucos segundos

  1. A reinicialização está associada à seguinte mensagem de erro:
/var/www/discourse/lib/demon/sidekiq.rb:31:in `heartbeat_check'
config/unicorn.conf.rb:131:in `block (2 levels) in reload'
E, [2025-11-01T11:56:05.989645 #67] ERROR -- : reaped #<Process::Status: pid 6534 SIGKILL (signal 9)> worker=unknown
I, [2025-11-01T11:56:41.468169 #7038]  INFO -- : Loading Sidekiq in process id 7038
W, [2025-11-01T11:57:20.944092 #67]  WARN -- : Process would not terminate cleanly, force quitting. pid: 7038 Demon::Sidekiq
/var/www/discourse/lib/demon/base.rb:94:in `restart'
/var/www/discourse/lib/demon/sidekiq.rb:40:in `block in heartbeat_check'
/var/www/discourse/lib/demon/sidekiq.rb:31:in `each'
/var/www/discourse/lib/demon/sidekiq.rb:31:in `heartbeat_check'
  1. A “visualização do sidekiq” não parece processar trabalhos

  1. A interface do usuário mostra alguns avisos de que o sidekiq não está funcionando corretamente: Uma verificação de atualizações não foi realizada. Certifique-se de que o Sidekiq esteja em execução.

Aqui está o que tentei:

  • reconstruir (sem erro)
  • limpar a fila do Redis (funciona, o painel do Sidekiq volta a zero, mas as tarefas ainda não são processadas)
  • verifiquei a versão do redis no contêiner de dados (versão do redis: 7.0.15)
  • verifiquei se o Sidekiq está pausado (não está)
  • folheei os logs em shared/web-only/log, mas não consegui encontrar nada relevante, embora dicas adicionais sejam bem-vindas!
  • Tentei ativar os logs do Sidekiq definindo DISCOURSE_LOG_SIDEKIQ: 1 em web_only.yml, seguido por ./launcher stop web_only && ./launcher destroy web_only && ./launcher start web_only, e o log mostra apenas mensagens de sucesso como:
{"hostname":"forum-web-only","pid":12961,"database":"chatonnade","job_id":null,"job_name":"Jobs::DiscourseAutomation::StalledWikiTracker","job_type":"scheduled","opts":"{}","status":"success","live_slots_start":1298445,"duration":0.04405494895763695,"sql_duration":0.03392060892656446,"sql_calls":1,"redis_duration":0,"redis_calls":0,"net_duration":0,"net_calls":0,"live_slots_finish":1299663,"live_slots":1218,"@timestamp":"2025-11-01T12:17:32.561+00:00"}

Estou ficando sem ideias sobre o que posso fazer para identificar o problema. Onde posso procurar uma mensagem de erro significativa?

Muito obrigado!

Notei a mesma coisa, mas não é tão frequente. Tem funcionado bem por anos, mas ultimamente vejo acontecer cerca de uma vez por mês. Eu até dobrei a RAM na instância no ano passado para acompanhar as atualizações do Discourse.

Mensagem

Teste de batimento cardíaco do Sidekiq falhou para 2087, reiniciando

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/broadcast_logger.rb:218:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/broadcast_logger.rb:217:in `map'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/broadcast_logger.rb:217:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-8.0.4/lib/active_support/broadcast_logger.rb:129:in `warn'
/var/www/discourse/lib/demon/sidekiq.rb:39:in `block in heartbeat_check'
/var/www/discourse/lib/demon/sidekiq.rb:31:in `each'
/var/www/discourse/lib/demon/sidekiq.rb:31:in `heartbeat_check'
config/unicorn.conf.rb:131:in `block (2 levels) in reload'
1 curtida

Obrigado! Depois de horas de investigação, minha melhor aposta é que o Sidekiq reinicia quando o servidor está sob estresse (IO, CPU, RAM), mas não consegui identificar com mais clareza (sem logs, sem OOM - Out Of Memory).

A frequência de reinicialização diminuiu de uma vez por minuto para uma vez a cada ~10 minutos (permitindo assim o processamento da fila) e, depois, para ainda menos.