Hallo zusammen,
ich habe ein Problem, bei dem ich eure Hilfe benötige. Ich habe einen Server mit Discourse installiert, der auf dem Docker-basierten Installer läuft. Jeden Tag gegen Mittag wird der Server aus mir noch unbekannten Gründen langsam, und ich sehe, dass die I/O-Last so stark ansteigt, dass das Forum anfängt, Fehler 500 anzuzeigen.
iotop meldet mir stets, dass es sich um ein PostgreSQL-UPDATE handelt, das die gesamte I/O-Last aufbraucht.
Als es heute wieder passiert ist, habe ich mit diesem Befehl eine Liste aller laufenden SQL-Abfragen erstellt:
sudo -u postgres psql discourse -o /tmp/RunningQueries -c ‘SELECT datname,pid,state,query FROM pg_stat_activity’
Die Ausgabe dieses Befehls findet ihr hier auf Pastebin.
Wie ihr sehen könnt, laufen zu diesen Zeiten etwa 32 UPDATE-Abfragen. Wenn das passiert, zeigt iotop an, dass die Datenbank zwischen 2,5 MB/s und 15 MB/s liest und schreibt.
Wenn ich die laufende UPDATE-Abfrage mit dem protokollierten Query (in /var/discourse/shared/standalone/log/var-log/postgresql) vergleiche, stelle ich fest, dass diese Abfragen extrem lange dauern:
2018-07-03 12:51:27.052 UTC [17504] discourse@discourse LOG: duration: 2352061.872 ms statement: UPDATE drafts
SET data = '{"reply":"<redacted for debugging purposes>","action":"reply","categoryId":24,"postId":118034,"archetypeId":"regular","whisper":false,"metaData":null,"composerTime":65922,"typingTime":8400}',
entspricht
discourse | 17504 | active | UPDATE drafts +
| | | SET data = '{"reply":"<redacted for debugging purposes>","action":"reply","categoryId":24,"postId":118034,"archetypeId":"regular","whisper":false,"metaData":null,"composerTime":65922,"typingTime":8400}', +
| | | sequence = 124, +
| | | revisions = revisions + 1 +
| | | WHERE id = 84548
Wenn ich die Docker-App neu starte, kehren die Abfragen zwar zurück, aber im Grunde kann ich nur abwarten, was meine Nutzer unzufrieden macht.
Bitte gebt mir Bescheid, ob ich etwas tun kann, um das Problem zu mildern – zum Beispiel indem ich Wartungsaufgaben auf etwa 5 Uhr morgens verschiebe.
Wenn ihr weitere Vorschläge habt, wie ich tiefer graben kann, teilt sie bitte mit! Jede Hilfe ist willkommen ![]()
Ninja-Edit: Mir ist gerade noch eine zusätzliche Information eingefallen: Ich konnte dies nicht mit bestehenden Cronjobs in Verbindung bringen (weder vom Host-Betriebssystem noch innerhalb der Docker-App).
Einige Hintergrundinformationen zum Server:
- Server-Betriebssystem: Ubuntu 18.04LTS
- Es handelt sich um eine VM mit 100 GB Festplattenspeicher, 4 GB RAM und 4 Kernen
- Die Festplatte ist ein RAID10 mit 6 Festplatten und 15K Umdrehungen
- Discourse v2.1.0.beta2 +107
- Plugins: babble, whos-online, voting, cakeday, anonymous-categories, league
- Seitenaufrufe pro Tag: Ca. 75.000
- Nutzer: 1.350, davon täglich ca. 700 aktiv
- 73.600 Beiträge, 351 Themen, das aktivste Thema enthält 13.500 Beiträge
Danke, dass ihr das hier bis zum Ende gelesen habt! ![]()


