Sidekiq hängt möglicherweise beim BotInput-Job?

In der letzten Woche haben wir auf verschiedenen Foren drei Sidekiq-Instanzen beobachtet, die feststeckten. Es geschah nichts Besonderes, Sidekiq verarbeitete einfach keine Arbeit mehr und zeigte an, dass 5 von 5 Jobs verarbeitet wurden.

Eine interessante Gemeinsamkeit war, dass unter den Jobs ein kritischer BotInput-Job war. Dies ist zwar ein ziemlich häufiger Job, aber er fällt dennoch auf.

Nach einem Neustart von Sidekiq funktioniert alles wieder normal. Das manuelle Anfordern eines Jobs mit denselben Parametern führt nicht erneut zu einem Hängenbleiben. Es gibt nichts Besonderes an dem spezifischen Beitrag, für den er aufgerufen wurde.

Hat jemand eine Idee, wie wir herausfinden können, was hier vor sich geht?

1 „Gefällt mir“

Wir hatten auch Abstürze wie diese, und unser Host kann nicht herausfinden, was die Ursache dafür ist.

[quote=„Richard – Communiteq, post:1, topic:352661, username:RGJ“]Es war nur so, dass Sidekiq keine Arbeit verarbeitete und 5 von 5 Jobs als verarbeitet anzeigte.
[/quote]

Haben Sie einen Screenshot von dem, was Sie im Dashboard sehen?

Wenn möglich, versuchen Sie bitte, dem Sidekiq-Prozess das TTIN-Signal zu senden und stellen Sie den Backtrace hier zur Verfügung.

1 „Gefällt mir“

Entschuldigung, es hat eine Weile gedauert, bis dies wieder passiert ist.

sidekiq-clean.txt (35,8 KB)

Zusammenfassung der Protokolle

[default] Thread TID-1ow77 
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/cli.rb:199:in `backtrace'
--
[default] Thread TID-1o1jr 
[default] /var/www/discourse/lib/demon/base.rb:234:in `sleep'
--
[default] Thread TID-1o1j7 
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/connection/ruby.rb:57:in `wait_readable'
--
[default] Thread TID-1o1j3 
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/message_bus-4.3.8/lib/message_bus/timer_thread.rb:130:in `sleep'
--
[default] Thread TID-1o1ij AR Pool Reaper
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb:49:in `sleep'
--
[default] Thread TID-1o1hj 
[default] 
--
[default] Thread TID-1o1gz AR Pool Reaper
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb:49:in `sleep'
--
[default] Thread TID-1o1gv 
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:18:in `sleep'
--
[default] Thread TID-1o1gb 
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:32:in `sleep'
--
[default] Thread TID-1otmb 
[default] /var/www/discourse/app/models/top_topic.rb:8:in `refresh_daily!'
--
[default] Thread TID-1otkn 
[default] /var/www/discourse/app/models/top_topic.rb:8:in `refresh_daily!'
--
[default] Thread TID-1otjz 
[default] /var/www/discourse/app/models/top_topic.rb:8:in `refresh_daily!'
--
[default] Thread TID-1otif 
[default] /var/www/discourse/app/models/top_topic.rb:8:in `refresh_daily!'
--
[default] Thread TID-1othr 
[default] /var/www/discourse/app/models/top_topic.rb:8:in `refresh_daily!'
--
[default] Thread TID-1o1fb 
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler.rb:80:in `sleep'
--
[default] Thread TID-1o1er 
[default] /var/www/discourse/lib/mini_scheduler_long_running_job_logger.rb:87:in `sleep'
--
[default] Thread TID-1o1en heartbeat
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/launcher.rb:76:in `sleep'
--
[default] Thread TID-1o1e3 scheduler
[default] /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/connection_pool-2.5.0/lib/connection_pool/timed_stack.rb:79:in `sleep'
--
[default] Thread TID-1ot4n processor
[default] /var/www/discourse/app/models/email_log.rb:58:in `unique_email_per_post'
--
[default] Thread TID-1ot67 processor
[default] /var/www/discourse/app/models/email_log.rb:58:in `unique_email_per_post'
--
[default] Thread TID-1ot8j processor
[default] /var/www/discourse/app/models/email_log.rb:58:in `unique_email_per_post'
--
[default] Thread TID-1ot5n processor
[default] /usr/local/lib/ruby/3.3.0/bundled_gems.rb:74:in `require'
--
[default] Thread TID-1ot6b processor
[default] /var/www/discourse/lib/distributed_mutex.rb:5:in `<main>'
--
[default] Thread TID-1o0kn final-destination_resolver_thread
[default] 
--
[default] Thread TID-1o0k3 Timeout stdlib thread
[default] 

@tgxworld Hatten Sie die Gelegenheit, sich den Backtrace anzusehen?

Ich habe seit einem Forum-Upgrade vor einem Monat Probleme mit Sidekiq. Welchen Befehl verwenden Sie, um Sidekiq neu zu starten? Nur ein sv restart sidekiq?

Entschuldigung, ich hatte noch keine Gelegenheit, es mir anzusehen. Ich werde versuchen, es diese Woche zu erledigen.

1 „Gefällt mir“

Ich sehe das in den letzten Tagen. Schließlich hören alle Jobs auf zu laufen. Zuvor habe ich neu gestartet, aber ist es sicher, die kritische Warteschlange zu löschen? Ist es eine Redis-Warteschlange?

Ich bin auf dem neuesten Stand bei 3.5.0.beta1-dev.

Nur eine wilde Vermutung, aber manchmal, wenn ich mit dem Bot chatte, hört er auf zu antworten, also aktualisiere ich die Seite oder gebe auf. Vielleicht hinterlassen diese Fälle einen hängenden Job?

1 „Gefällt mir“

Diese Jobs sind asynchron, sie würden nicht einmal bemerken, dass Sie das getan haben.

Es ist interessant zu hören, dass Sie dieses Problem auch bei Jobs::BotInput haben. Wir sehen dieses Problem nur bei einer kleinen Teilmenge all unserer Server (ein paar Prozent) und es scheint sich um die Instanzen zu handeln, die den narrativen Bot recht intensiv nutzen.

Nein, Sie würden auch alle anderen anstehenden Jobs verlieren.

Der einfachste und sicherste Weg ist sv reload unicorn aus dem Container heraus.

1 „Gefällt mir“

[Zitat=“Richard - Communiteq, Beitrag:10, Thema: 352661, Benutzername: RGJ”]
Wir sehen dieses Problem nur bei einer kleinen Untergruppe aller unserer Server (ein paar Prozent), und es scheint die Instanzen zu betreffen, die den Narrative Bot recht intensiv nutzen.
[/Zitat]

Das ist bei unserem Forum nicht der Fall. KI ist nur für das Personal sichtbar, und ich habe bestätigt, dass kein Personal sie benutzt.

Ich habe KI vorerst deaktiviert.

BotInput ist ein Job vom Discourse Narrative Bot (auch Discobot genannt), nicht vom KI-Bot.

Ah. Ich habe die API intensiv genutzt, als der Benutzername discobot.

Ich habe mir die Backtraces angesehen und sie deuten alle auf ein Problem mit der folgenden Zeile hin:

Ich bin mir nicht ganz sicher, warum diese Zeile Probleme verursachen würde, aber sie ist nicht notwendig, also habe ich sie entfernt.

@RGJ Hast du vielleicht Rails.application.config.eager_load aus irgendeinem Grund auf deaktiviert gesetzt? :thinking:

2 „Gefällt mir“

Interessanter Fund, danke, dass Sie sich damit beschäftigt haben.
Es ist schwer zu sagen, wann ein solches intermittierendes Problem verschwindet. Ich habe diese Zeile in den drei Instanzen entfernt, die am häufigsten hingen (eine davon fast täglich). Ich werde hier entweder wieder nachsehen:

  • wenn eine dieser Instanzen hängt (dann wissen wir, dass dies nicht geholfen hat)
  • am Freitag, wenn keine von ihnen gehangen hat (dann können wir annehmen, dass es die Lösung war)

Nein, damit habe ich nichts gemacht.

Aber jemand hat es getan…

Rails.autoloaders.main.do_not_eager_load(config.root.join("lib"))

bei Blaming discourse/config/application.rb at main · discourse/discourse · GitHub

3 „Gefällt mir“

@loic Erinnerst du dich, warum wir das lib-Verzeichnis auch in der Produktion nicht vorab laden?

1 „Gefällt mir“

[quote=„Richard – Communiteq, Beitrag:16, Thema:352661, Benutzername:RGJ“]
Es ist schwer zu sagen, wann ein solches intermittierendes Problem verschwindet. Ich habe diese Zeile bei den drei Instanzen entfernt, die am häufigsten hingen (eine davon fast täglich). Ich werde hier wieder nachsehen:\n\n* wenn eine dieser Instanzen hängt (dann wissen wir, dass dies nicht geholfen hat)\n* am Freitag, wenn keine davon gehangen hat (dann können wir davon ausgehen, dass es die Lösung war)\n[/quote]\n\nObwohl die Probleme diese Woche aufgetreten sind, traten sie bei den drei Instanzen, bei denen wir diese require-Zeile entfernt haben, nicht auf. Ich denke also, wir können sicher davon ausgehen, dass dies der Schuldige ist :tada:. Vielen Dank, dass Sie das bemerkt haben, @tgxworld, das hätte ich niemals gefunden.\n\nWären Sie in der Lage, diesen Fix zurück in die stabile Version zu portieren?

1 „Gefällt mir“

Das hängt damit zusammen, was hier erklärt wird (als wir auf Rails 7.1 aktualisiert haben): Upgrading Ruby on Rails — Ruby on Rails Guides

Ich erinnere mich nicht an das genaue Problem, aber wir haben das vorherige Verhalten beibehalten und mussten Dinge aus lib anfordern.