Das sieht für mich nicht nach einem Speicherproblem aus – es werden nur etwa 6 GB von Anwendungen belegt. Es findet viel Lesen statt, was meiner Vermutung nach (zusammen mit der Tatsache, dass Sidekiq beschäftigt ist) bedeutet, dass Postgres möglicherweise viele alte Daten von der Festplatte liest, vielleicht um einige Statistikjobs durchzuführen. Wenn die Datenbank nicht in den RAM passt, wird sie potenziell viel lesen, wenn auf diese älteren Daten zugegriffen wird. Das riecht danach.
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
admin 2510013 15.8 1.6 7383364 514764 ? SNl 12:55 56:45 sidekiq 7.3.9 discourse [3 of 5 busy]
systemd+ 2848301 26.9 25.3 8058104 7806820 ? Rs 17:45 18:18 postgres: 13/main: discourse discourse [local] SELECT
systemd+ 2870880 4.3 22.9 8058516 7072000 ? Ds 18:03 2:09 postgres: 13/main: discourse discourse [local] SELECT
systemd+ 2875058 21.0 25.4 8101952 7848140 ? Rs 18:07 9:46 postgres: 13/main: discourse discourse [local] UPDATE
systemd+ 2924006 30.2 25.3 8112844 7824292 ? Rs 18:44 2:44 postgres: 13/main: discourse discourse [local] UPDATE
jystemd+ 2929546 12.8 24.9 8049520 7694404 ? Ss 18:48 0:39 postgres: 13/main: discourse discourse [local] SELECT
systemd+ 2931802 17.7 24.5 8045744 7559492 ? Ss 18:50 0:36 postgres: 13/main: parallel worker for PID 946796
systemd+ 2931803 17.7 24.5 8045744 7557568 ? Ds 18:50 0:36 postgres: 13/main: parallel worker for PID 946796
Ich würde zuerst bei sidekiq nachsehen – ich wette, es führt gerade Updates aus. Überprüfen Sie die URL /sidekiq, während Sie als Administrator angemeldet sind, um zu sehen, was es tut. Dort werden wahrscheinlich einige lang laufende Update-Aufgaben angezeigt.
Sie können auch auf dem SQL-Server Folgendes tun:
SELECT pid, application_name, query
FROM pg_stat_activity
WHERE state IS NOT NULL
AND state != 'idle';
um zu sehen, welche Abfragen ausgeführt werden und was sie aufruft. Das gibt einen Hinweis darauf, was die Last verursacht.
Haben Sie Performance-Header aktiviert? Sie können diese aktivieren und in den Protokollen erfassen lassen, um festzustellen, wie viel Zeit Discourse für jeden Teil aufwendet.