Sidekiq が再起動し続けます。トラブルシューティング方法は?

こんにちは。

約4年間、2つのコンテナ、マルチドメインのDiscourseサーバーを運用しており、約20のドメインをホストしています。定期的なアップデートは成功裏に行ってきました。しかし、10月初旬(10月8〜10日頃)に、おそらくDiscourseのアップデート後に、サインアップメールが送信されなくなったことに気づきました。sidekiqタスクが実行されず、Sidekiqが再起動し続けていることがわかりました。

通常の移行との唯一の違いは、今回はすべてのPostgresデータベースを手動で変更して最新のvector拡張機能を有効にする必要があったことです。アップグレードスクリプトは、メインのdiscourseデータベースに対してのみ行うようです。

症状:

  1. ログには、Sidekiqが数秒ごとに再起動していることが表示されます。

  2. 再起動は、次のエラーメッセージに関連しています。

    /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'
    
  3. 「sidekiqビュー」はジョブを処理していないようです。

  4. UIには、sidekiqが正常に実行されていないことを示す警告が表示されます。「更新のチェックが実行されていません。Sidekiqが実行されていることを確認してください。」

試したこと:

  • 再構築(エラーなし)

  • Redisキューのフラッシュ(機能する。Sidekiqダッシュボードはゼロに戻るが、タスクはまだ処理されない)

  • データコンテナ内のredisバージョンを確認(redisバージョン:7.0.15)

  • Sidekiqが一時停止しているか確認(一時停止していない)

  • shared/web-only/logのログをざっと確認したが、関連するものは見つからなかった。(追加のポインターがあれば歓迎!)

  • web_only.ymlDISCOURSE_LOG_SIDEKIQ: 1を設定し、./launcher stop web_only && ./launcher destroy web_only && ./launcher start web_onlyを実行してSidekiqログを有効にしようとした。ログには次のような成功メッセージのみが表示される。

    {"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"}
    

    問題の特定に役立つアイデアが尽きてきました。意味のあるエラーメッセージはどこで探せばよいでしょうか?

よろしくお願いします!

私も同じことに気づきましたが、それほど頻繁ではありません。長年正常に動作していましたが、最近では月に一度程度発生します。Discourseのアップグレードに対応するために、昨年インスタンスのRAMを2倍にしたことさえあります。

メッセージ

Sidekiqハートビートテストが2087で失敗しました。再起動しています。

バックトレース

/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

ありがとうございます!何時間も調査した結果、サーバーがストレス(I/O、CPU、RAM)にさらされるとSidekiqが再起動する可能性が最も高いと思われますが、それ以上は特定できませんでした(ログもOOMもありません)。

再起動の頻度は、1分に1回から約10分に1回に減少し(これによりキューの処理が可能になりました)、さらに頻度が低くなっています。