Sidekiq redémarre sans cesse, comment dépanner ?

Bonjour,

Nous exécutons un serveur Discourse multi-domaines à deux conteneurs depuis environ 4 ans et hébergeons environ 20 domaines. Nous avons effectué des mises à jour régulières avec succès. Cependant, nous avons constaté début octobre (vers le 8-10 octobre), probablement suite à une mise à jour de Discourse, que les e-mails d’inscription n’étaient pas envoyés. Nous avons remarqué que la tâche sidekiq ne s’exécute pas et que Sidekiq redémarre continuellement.

La seule différence avec les migrations régulières que nous effectuons est que cette fois, j’ai dû modifier manuellement toutes les bases de données Postgres pour activer la dernière extension vector ; il semble que le script de mise à niveau ne le ferait que sur la base de données principale, discourse.

Symptômes :

  1. Les journaux indiquent que Sidekiq redémarre toutes les quelques secondes.

  1. Le redémarrage est associé au message d’erreur suivant :
/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 « vue sidekiq » ne semble pas traiter les tâches.

  1. L’interface utilisateur affiche des avertissements indiquant que sidekiq ne fonctionne pas correctement : « Une vérification des mises à jour n’a pas été effectuée. Assurez-vous que Sidekiq est en cours d’exécution. »

Voici ce que j’ai essayé :

  • Reconstruction (aucune erreur)
  • Vidage de la file d’attente Redis (fonctionne, le tableau de bord Sidekiq revient à zéro mais les tâches ne sont toujours pas traitées)
  • Vérification de la version de redis dans le conteneur de données (version de redis : 7.0.15)
  • Vérification si Sidekiq est en pause (il ne l’est pas)
  • Parcouru les journaux dans shared/web-only/log, mais je n’ai rien trouvé de pertinent, bien que des pistes supplémentaires soient les bienvenues !
  • J’ai essayé d’activer les journaux Sidekiq en définissant DISCOURSE_LOG_SIDEKIQ: 1 dans web_only.yml suivi de ./launcher stop web_only && ./launcher destroy web_only && ./launcher start web_only, et le journal n’affiche que des messages de succès tels que :
{"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"}

Je manque d’idées sur ce que je pourrais faire pour identifier le problème. Où puis-je chercher un message d’erreur significatif ?

Merci beaucoup !

J’ai remarqué la même chose, mais c’est moins fréquent. Cela fonctionne bien depuis des années, mais dernièrement, je constate que cela se produit environ une fois par mois. J’ai même doublé la RAM de l’instance l’année dernière pour suivre les mises à niveau de Discourse.

Message

Le test de battement de cœur de Sidekiq a échoué pour 2087, redémarrage

Trace de la pile

/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 « J'aime »

Merci ! Après des heures de recherche, mon meilleur pari est que Sidekiq redémarre lorsque le serveur est soumis à un stress (E/S, CPU, RAM), mais je n’ai pas pu le déterminer plus clairement (pas de journaux, pas de mémoire saturée - OOM).

La fréquence des redémarrages est passée d’une fois par minute à environ une fois toutes les $\sim$10 minutes (permettant ainsi le traitement de la file d’attente), puis encore moins fréquente.