Sidekiq continua a riavviarsi, come risolvere?

Ciao,

Stiamo gestendo un server Discourse multi-dominio a due container da circa 4 anni e ospitiamo circa 20 domini. Abbiamo eseguito aggiornamenti regolari con successo. Tuttavia, ci siamo resi conto all’inizio di ottobre (a partire da circa l’8-10 ottobre), probabilmente a seguito di un aggiornamento di Discourse, che le email di iscrizione non venivano inviate. Abbiamo notato che il task di sidekiq non viene eseguito e che Sidekiq continua a riavviarsi.

L’unica differenza con le normali migrazioni che eseguiamo è che questa volta ho dovuto modificare manualmente tutti i database Postgres per attivare l’ultima estensione vector; sembra che lo script di aggiornamento lo facesse solo sul database principale, discourse.

Sintomi:

  1. I log mostrano che Sidekiq si riavvia ogni pochi secondi

  1. Il riavvio è associato al seguente messaggio di errore:
/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. La “vista di sidekiq” non sembra elaborare i job

  1. L’interfaccia utente mostra alcuni avvisi che sidekiq non funziona correttamente: “Un controllo degli aggiornamenti non è stato eseguito. Assicurati che Sidekiq sia in esecuzione.”

Ecco cosa ho provato:

  • ricostruzione (nessun errore)
  • svuotamento della coda di Redis (funziona, la dashboard di Sidekiq torna a zero ma i task non vengono ancora elaborati)
  • controllo della versione di redis nel container dati (versione di redis: 7.0.15)
  • controllo se Sidekiq è in pausa (non lo è)
  • scorrimento dei log in shared/web-only/log, ma non ho trovato nulla di pertinente, anche se suggerimenti aggiuntivi sono benvenuti!
  • Ho provato ad attivare i log di Sidekiq impostando DISCOURSE_LOG_SIDEKIQ: 1 in web_only.yml seguito da ./launcher stop web_only && ./launcher destroy web_only && ./launcher start web_only, e il log mostra solo messaggi di successo come:
{"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"}

Sto esaurendo le idee su cosa potrei fare per individuare il problema. Dove posso cercare un messaggio di errore significativo?

Molte grazie!

Ho notato la stessa cosa, ma non è così frequente. Ha funzionato bene per anni, ma ultimamente succede circa una volta al mese. Ho persino raddoppiato la RAM sull’istanza l’anno scorso per tenere il passo con gli aggiornamenti di Discourse.

Messaggio

Il test dell'heartbeat di Sidekiq è fallito per 2087, riavvio in corso

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 Mi Piace

Grazie! Dopo ore di ricerche, la mia migliore ipotesi è che Sidekiq si riavvii quando il server è sotto stress (IO, CPU, RAM), ma non sono riuscito a individuare con maggiore chiarezza (nessun log, nessun OOM).

La frequenza del riavvio è passata da una volta al minuto a una volta ogni circa 10 minuti (consentendo così l’elaborazione della coda), e poi a una frequenza ancora inferiore.