Sidekiq가 계속 재시작되는 문제, 어떻게 해결할 수 있을까요?

안녕하세요,

저희는 약 4년 동안 두 개의 컨테이너로 구성된 멀티 도메인 Discourse 서버를 운영해 왔으며, 약 20개의 도메인을 호스팅하고 있습니다. 그동안 정기적인 업데이트를 성공적으로 수행해 왔습니다. 그러나 10월 초(대략 10월 8일~10일경)부터, 아마도 Discourse 업데이트 이후에 가입 이메일이 전송되지 않는다는 사실을 알게 되었습니다. sidekiq 태스크가 실행되지 않고 있으며, Sidekiq가 계속 재시작되고 있다는 점도 확인했습니다.

정기적으로 수행하던 마이그레이션과의 유일한 차이점은, 이번에는 최신 vector 확장자를 활성화하기 위해 모든 Postgres 데이터베이스를 수동으로 수정해야 했다는 것입니다. 업그레이드 스크립트는 메인 discourse 데이터베이스에서만 이를 처리하는 것으로 보입니다.

증상:

  1. 로그에 Sidekiq가 몇 초마다 재시작되는 것으로 나타납니다.

  1. 재시작은 다음과 같은 오류 메시지와 함께 발생합니다:
/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. “sidekiq view”에서 작업이 처리되지 않는 것으로 보입니다.

  1. UI에서 Sidekiq가 제대로 실행되지 않는다는 몇 가지 경고가 표시됩니다: A check for updates has not been performed. Ensure Sidekiq is running.

저희가 시도해 본 내용은 다음과 같습니다:

  • 재빌드 (오류 없음)
  • Redis 큐 플러싱 (동작합니다. Sidekiq 대시보드가 0으로 돌아오지만 태스크는 여전히 처리되지 않음)
  • 데이터 컨테이너의 redis 버전 확인 (redis 버전: 7.0.15)
  • Sidekiq가 일시 정지되어 있는지 확인 (아님)
  • shared/web-only/log의 로그를 훑어보았지만 관련 있는 내용을 찾지 못했습니다. 추가적인 힌트가 있다면 환영합니다!
  • web_only.yml에서 DISCOURSE_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을 두 배로 늘리기도 했습니다.

Message

Sidekiq heartbeat test failed for 2087, restarting

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'

감사합니다! 몇 시간 동안 조사해 본 결과, 서버가 스트레스(입출력, CPU, RAM)를 받을 때 Sidekiq가 재시작되는 것 같지만, 더 명확하게 특정할 수는 없었습니다(로그 없음, OOM 없음).

재시작 빈도는 1분에 한 번에서 약 10분에 한 번(이로써 큐 처리가 가능해짐)으로, 그리고 그보다 더 낮은 빈도로 줄어들었습니다.