Discourse-Absturz aufgrund von PSQL-Verbindungsproblem

Wir erhielten diese Meldung in unserem Forum. (ungefähr alle 3-4 Stunden). Wir haben 16 CPU-Kerne und 32 GB RAM. Ich glaube nicht, dass die Ressourcen ein Problem darstellen.

Oops
Die Software, die dieses Diskussionsforum antreibt, ist auf ein unerwartetes Problem gestoßen. Wir entschuldigen uns für die Unannehmlichkeiten.

Detaillierte Informationen über den Fehler wurden protokolliert und eine automatische Benachrichtigung generiert. Wir werden uns darum kümmern.

Es sind keine weiteren Maßnahmen erforderlich. Wenn der Fehler jedoch weiterhin besteht, können Sie zusätzliche Details, einschließlich der Schritte zur Reproduktion des Fehlers, angeben, indem Sie ein Diskussionsthema in der Feedback-Kategorie der Website veröffentlichen.

Das Produktionsprotokoll zeigt


app/models/user_auth_token.rb:125:in `lookup'
lib/auth/default_current_user_provider.rb:131:in `current_user'
lib/current_user.rb:35:in `current_user'
app/controllers/application_controller.rb:1047:in `rate_limit_crawlers'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:393:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
config/initializers/100-silence_logger.rb:27:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:236:in `call'
Unerwarteter Fehler in Message Bus: ActiveRecord::ConnectionNotEstablished: Verbindung zum Server unter "172.17.0.2", Port 5432 fehlgeschlagen: FATAL: verbleibende Verbindungsslots sind für nicht-replizierende Superuser-Verbindungen reserviert.

Unerwarteter Fehler in Message Bus: ActiveRecord::ConnectionNotEstablished: Verbindung zum Server unter "172.17.0.2", Port 5432 fehlgeschlagen: FATAL: verbleibende Verbindungsslots sind für nicht-replizierende Superuser-Verbindungen reserviert.

Unerwarteter Fehler in Message Bus: ActiveRecord::ConnectionNotEstablished: Verbindung zum Server unter "172.17.0.2", Port 5432 fehlgeschlagen: FATAL: verbleibende Verbindungsslots sind für nicht-replizierende Superuser-Verbindungen reserviert.

Unerwarteter Fehler in Message Bus: ActiveRecord::ConnectionNotEstablished: Verbindung zum Server unter "172.17.0.2", Port 5432 fehlgeschlagen: FATAL: verbleibende Verbindungsslots sind für nicht-replizierende Superuser-Verbindungen reserviert.

Wir haben die folgende Konfiguration eingestellt in

UNICORN_WORKERS: 32
UNICORN_SIDEKIQS: 2

und für psql

db_shared_buffers: "4096MB"

Bitte lassen Sie mich wissen, was ich sonst noch tun kann, um die Konfiguration zu verbessern und sicherzustellen, dass der Server nicht abstürzt.

Ich würde Postgres (db_shared_buffers) mindestens 16 GB, wenn nicht sogar 20 GB geben.

Aber Sie müssen mehr DB-Verbindungen herstellen. Ich erinnere mich nicht mehr genau, wie das geht.

Ich glaube, Sie müssen max_connections in /etc/postgresql/postgresql.conf (innerhalb des Containers, der Postgres ausführt) ändern.

1 „Gefällt mir“

Ich denke auch. :+1:

Sind Sie sicher? Das erscheint hoch. Siehe PostgreSQL: Documentation: 13: 19.4. Resource Consumption

Wenn Sie einen dedizierten Datenbankserver mit 1 GB oder mehr RAM haben, ist ein vernünftiger Startwert für shared_buffers 25 % des Speichers in Ihrem System. Es gibt einige Workloads, bei denen sich sogar größere Einstellungen für shared_buffers als effektiv erweisen, aber da PostgreSQL auch auf den Cache des Betriebssystems angewiesen ist, ist es unwahrscheinlich, dass eine Zuweisung von mehr als 40 % des RAMs an shared_buffers besser funktioniert als eine geringere Menge.

Und dies ist kein dedizierter Datenbankserver, es laufen auch 32 Unicorn-Prozesse darauf.

Ich richte mich bei solchen Dingen immer nach dir und dachte, ich würde einen Rat zitieren, den du in der Vergangenheit gegeben hast. Also, NEIN, ich bin mir nicht sicher. :rofl:

Es ist ziemlich klar, dass die Verbindungen das Problem sind und die Erhöhung des RAMs auf 25 % von 32 GB im Allgemeinen helfen könnte, aber nicht die Ursache des Fehlers ist.

BEARBEITEN:

Ha! Das ist genau das, woran ich mich erinnert habe, außer dass es so aussieht, als hätte ich über 50 % gehen wollen. . .

1 „Gefällt mir“

Ich bekenne mich irgendwie schuldig

Aber das war damals … :wink:

:100:

2 „Gefällt mir“

Warum? Das ist der Grund, warum Ihnen die Verbindungsslots ausgehen.

1 „Gefällt mir“

Ich glaube, ich habe irgendwo gelesen, dass UNICORN WORKER 2 * CPU sein sollte. Also habe ich die Rechnung auf 32 gemacht. Sollte ich runterskalieren?

Wir haben versucht, die Timeout-Einstellung für PSQL zu ändern, indem wir Folgendes ausgeführt haben: ALTER ROLE discourse SET statement_timeout = '30000';. Und diese Abfrage wurde blockiert, einmal alle paar Stunden.


Ich bin mir nicht sicher, ob Sie oder sonst jemand eine Idee hat, was passiert ist?

Nein, bitte entfernen Sie dies und lassen Sie die Standardwerte gelten. Dies ist der klassische Fall von vorzeitiger Optimierung.

2 „Gefällt mir“

Ja, Sie haben an Dingen herumgespielt, an denen Sie nicht hätten herumspielen sollen :wink:

1 „Gefällt mir“

9 Beiträge wurden in ein neues Thema aufgeteilt: Empfehlung für die Anzahl der Worker: Kerne × 2?