Speicherfehler bei benutzerdefiniertem Plugin

Könnte jemand Anweisungen zur Konfiguration der Speicherallokation geben?

Angesichts der sporadischen Kernel-Meldungen „out of memory"/Dumps, der dreifach erhöhten Swap-Nutzung und der zunehmend verschlechterten Antwortzeiten der Anwendung scheint unsere App gelegentlich den Speicher zu erschöpfen. Unser System verfügt derzeit über 8 GB RAM und 2 GB Swap. Details siehe unten.

Ich habe die Anweisungen zum Hinzufügen von mehr physischem Speicher und Swap unter ("Cannot allocate memory" when upgrading) geprüft, konnte jedoch keine Details dazu finden, wie dieser zugewiesen wird.

Bei den Speicherkonfigurationen verwenden wir derzeit alle Standardeinstellungen. Das System erholt sich nach einigen Minuten, aber bei steigender Nutzung sind wir der Meinung, dass es an der Zeit ist, uns über Leistungsverbesserungen zu informieren. Ich bin mir jedoch unsicher, wo und wie dies konfiguriert werden soll. Soll die für die Docker-Instanz zugewiesene Speichergröße erhöht werden, oder die Anzahl der Ruby-Unicorns (oder beides)?

Ich bin Systemadministrator ohne Ruby- und mit begrenzten Docker-Erfahrungen. Daher wäre es sehr hilfreich, wenn Sie mir den Weg zur Konfigurationsdatei und die entsprechende Syntax aufzeigen könnten.

Discourse 2.6.0 beta2
Ruby 2.3.1-2~ubuntu16.04.14
Ubuntu 16.04

Wie viele Einhorn-Container betreibst du? Dies ist in deiner Datei /var/discourse/containers/app.yml festgelegt.

Hallo Rafael – Im Abschnitt „env

1 „Gefällt mir“

Hast du discourse-setup nach dem RAM-Upgrade erneut ausgeführt? Es passt die Speichereinstellungen entsprechend an. Du kannst auch die Kommentare in app.yml lesen und sie anpassen.

1 „Gefällt mir“

Es ist wirklich seltsam, dass es bei nur 4 Unicorns zu einem OoM kommt. Das sollte etwa 2 GB belegen, sodass 6 GB für PG und Redis übrig bleiben.

Sie müssen untersuchen, welcher Prozess während eines OoM-Ereignisses den gesamten Speicher verbraucht. Das ist nicht normal.

3 „Gefällt mir“

Hallo Rafael und Team, mein Name ist Serge, und ich arbeite mit Mr. Happy Lee zusammen, der gerade in den lang erwarteten Urlaub aufgebrochen ist. Ich werde mich daher um dieses Problem kümmern.

Als Ergänzung zur Beschreibung: Der Server wurde ursprünglich mit 8 GB RAM und 2 GB Swap-Speicher gebaut. Seitdem wurde er nicht aktualisiert.

In der Systemprotokolldatei sehe ich Hinweise darauf, dass Ruby der Prozess ist, der den gesamten Speicher verbraucht und einen Kernel-OoM (Out-of-Memory) verursacht:

Killed process 2960 (ruby) total-vm:10031472kB, anon-rss:7438148kB, file-rss:0kB

Da ich kein Ruby-Experte bin, bin ich mir nicht sicher, wie ich herausfinden kann, welcher Teil von Ruby so viel Speicher verbraucht.

Jegliche Vorschläge sind willkommen.

Vielen Dank.

– Serge

Betreibst du in dieser Discourse-Installation irgendwelche Plugins?

Wir nutzen zwar das benutzerdefinierte Plugin Scheduled Digest, aber es läuft auch auf unseren beiden anderen Installationen, wo es keine Probleme gibt.

Kannst du hier den Link zum Quellcode-Repository dieses Plugins posten?

1 „Gefällt mir“

Hallo Rafael,

die Entwicklung des Plugins wurde von unserer Organisation bezahlt, daher darf ich den Quellcode hier leider nicht offenlegen. Da das Plugin auf anderen Instanzen jedoch problemlos funktioniert, vermute ich, dass die Server-Ressourcen für diese spezifische Instanz erhöht werden müssen. Die Maschine ist eine VM, sodass ich den Arbeitsspeicher einfach verdoppeln und prüfen kann, ob dies das Problem behebt.

Alles Gute!

Es gibt nicht viel, was wir tun können, um Code zu debuggen, den wir auf unserer Seite nicht sehen können. Du könntest das Prometheus-Exporter-Plugin für Discourse einrichten, um Metriken auf deiner Instanz zu verfolgen.

1 „Gefällt mir“

Laufen die anderen Instanzen ebenfalls mit Ruby 2.3.1-2~ubuntu16.04.14?

Vielleicht ist das nicht relevant, aber:

Das war also eindeutig ein Ruby-Bug. Wir haben mehrere Ruby-Versionen getestet und festgestellt, dass nur Ruby 2.3.x und 2.4.x den Speicherleck aufweisen (anscheinend wurde dies in Ruby 2.5.0**** behoben).

Und die Discourse-README fordert [Ruby 2.6+] :roll_eyes:

1 „Gefällt mir“

Danke! Ich poste ein Update, sobald es sich beruhigt hat.

Hallo Benjamin, die anderen Instanzen laufen ebenfalls mit Ruby 2.3.1-2~ubuntu16.04.14. Ich werde ein Update testen, um zu prüfen, ob es unsere Docker-Umgebung nicht stört.

Die Ruby-Version ist hier nicht relevant.

Solange Sie unser offizielles Docker-Image verwenden, nutzen Sie die korrekte, von Discourse unterstützte Version.

2 „Gefällt mir“

Dieses Thema wurde automatisch nach 26 Stunden geschlossen. Neue Antworten sind nicht mehr erlaubt.