Discourse Docker HW reserviert/genutzt (CPU, RAM, Festplatte) und wie man es verwaltet

Ich habe dieses Wochenende damit verbracht, einige externe Tools auf der VM zu installieren, auf der unsere Discourse-Installation läuft (grafana, prometheus, einige Exporter) sowie einige Analysen (matomo) und die Einrichtung von Backups an einem externen Speicherort (AWS S3). Es ist zwei Monate her, seit unserer Migration und ich hatte endlich etwas freie Zeit, um dies zu tun.

Nachdem noch ein paar Tage vergingen, bis Metriken und Ähnliches gesammelt waren, ging ich zurück, um es zu überprüfen und bemerkte, dass der Container, der Discourse ausführt, praktisch den gesamten verfügbaren RAM verbraucht, laut cadvisor:

Was mir seltsam vorkommt, da es von anderen Quellen nicht so aussieht. Allerdings habe ich bemerkt, dass andere Aspekte noch einige Dinge aufweisen, die ich besser verstehen möchte.

Die CPU-Auslastung zum Beispiel hat Spitzen, tendiert aber im Durchschnitt dazu, fast die ganze Zeit weit über 100% zu liegen:

Dies ist jedoch die Ausgabe von Docker Stats:

CONTAINER ID   NAME                    CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O        PIDS
254d80933447   grafana                 0.02%     83.34MiB / 29.38GiB   0.28%     4.2MB / 10.1MB    88.2MB / 13MB    14
78d8a523c667   prometheus              0.00%     114.6MiB / 29.38GiB   0.38%     741MB / 50.7MB    190MB / 201MB    14
d602e2724c7a   cadvisor                1.48%     67.52MiB / 29.38GiB   0.22%     12.3MB / 691MB    166MB / 4.08MB   24
4718b3629c8e   docker_state_exporter   0.00%     11.54MiB / 29.38GiB   0.04%     2.85MB / 38.8MB   2.7MB / 90.1kB   14
c5a211185855   app                     337.52%   7.543GiB / 29.38GiB   25.67%    365MB / 883MB     360GB / 67.3GB   282
9b95fa3156bb   matomo_cron             0.00%     7.504MiB / 29.38GiB   0.02%     1.48kB / 0B       762MB / 0B       3
553a3e7389eb   matomo_web              0.11%     9.832MiB / 29.38GiB   0.03%     106MB / 203MB     8.89MB / 33MB    9
adf21bdea1e5   matomo_app              0.01%     113.3MiB / 29.38GiB   0.38%     166MB / 146MB     1.26GB / 153MB   4
96d873027990   matomo_db               0.03%     99.66MiB / 29.38GiB   0.33%     63.8MB / 126MB    118MB / 310MB    15
9d21fdde2ec9   node_exporter           0.00%     9.887MiB / 29.38GiB   0.03%     3MB / 48.9MB      10.5MB / 299kB   6

Ich habe bereits versucht, die Anzahl der Unicorn-Prozesse von der automatischen Erkennung (8) auf 4 zu reduzieren, aber ich sehe keine relevante Änderung in Bezug auf die genutzte CPU/Speicher.

Zu guter Letzt: Als wir unsere Datenbank von vbulletin3 nach Discourse importierten, war die Datenbank selbst etwa 7 GB groß. Wenn ich heute nachsehe, kann ich sehen, dass sie sich verzehnfacht hat.

du -sh /var/discourse/shared/standalone/* | sort -hr | head -n 10
70G     /var/discourse/shared/standalone/postgres_data
1.6G    /var/discourse/shared/standalone/uploads
807M    /var/discourse/shared/standalone/log
69M     /var/discourse/shared/standalone/redis_data
200K    /var/discourse/shared/standalone/postgres_run
28K     /var/discourse/shared/standalone/state
12K     /var/discourse/shared/standalone/tmp
12K     /var/discourse/shared/standalone/ssl
8.0K    /var/discourse/shared/standalone/backups
4.0K    /var/discourse/shared/standalone/postgres_backup

Ich vermute, das ist PostgreSQL, das im Hintergrund seine Arbeit macht und Unmengen an zusätzlichen Daten erstellt, aber gibt es etwas, das getan werden kann, um dies zumindest zu kontrollieren?

Ausgabe des Discourse Doctors, falls es helfen könnte:

DISCOURSE DOCTOR Mon May 15 09:44:17 AM CEST 2023
OS: Linux vmi1229594.OMITTED.net 5.15.0-67-generic #74-Ubuntu SMP Wed Feb 22 14:14:39 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux


Found containers/app.yml

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=OMITTED
SMTP_ADDRESS=OMITTED
DEVELOPER_EMAILS=OMITTED
SMTP_PASSWORD=OMITTED
SMTP_PORT=OMITTED
SMTP_USER_NAME=OMITTED
LETSENCRYPT_ACCOUNT_EMAIL=OMITTED

==================== DOCKER INFO ====================
DOCKER VERSION: Docker version 23.0.1, build a5ee5b1

DOCKER PROCESSES (docker ps -a)

CONTAINER ID   IMAGE                                     COMMAND                  CREATED        STATUS                 PORTS                                      NAMES
254d80933447   grafana/grafana:latest                    “/run.sh”        8 hours ago    Up 7 hours             0.0.0.0:8443->3000/tcp                     grafana
78d8a523c667   prom/prometheus:latest                    “/bin/prometheus --c…”   8 hours ago    Up 8 hours             0.0.0.0:9090->9090/tcp                     prometheus
d602e2724c7a   gcr.io/cadvisor/cadvisor:latest           “/usr/bin/cadvisor -…”   8 hours ago    Up 8 hours (healthy)                                              cadvisor
4718b3629c8e   karugaru/docker_state_exporter            “/go/bin/docker_stat…”   8 hours ago    Up 8 hours                                                        docker_state_exporter
c5a211185855   local_discourse/app                       “/sbin/boot”             9 hours ago    Up 7 hours             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
9b95fa3156bb   matomo:fpm                                “bash -c 'bash -s <…”   20 hours ago   Up 20 hours            9000/tcp                                   matomo_cron
553a3e7389eb   nginx:alpine                              “/docker-entrypoint.…”   21 hours ago   Up 21 hours            80/tcp, 0.0.0.0:2053->443/tcp              matomo_web
adf21bdea1e5   matomo:fpm-alpine                         “/entrypoint.sh php-…”   21 hours ago   Up 21 hours            9000/tcp                                   matomo_app
96d873027990   mariadb                                   “docker-entrypoint.s…”   21 hours ago   Up 21 hours            3306/tcp                                   matomo_db
9d21fdde2ec9   quay.io/prometheus/node-exporter:latest   “/bin/node_exporter …”   36 hours ago   Up 36 hours                                                       node_exporter

c5a211185855   local_discourse/app                       “/sbin/boot”             9 hours ago    Up 7 hours             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
adf21bdea1e5   matomo:fpm-alpine                         “/entrypoint.sh php-…”   21 hours ago   Up 21 hours            9000/tcp                                   matomo_app

Discourse container app is running


==================== PLUGINS ====================
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/discourse/discourse-animated-avatars.git
          - git clone https://github.com/discourse/discourse-whos-online.git
          - git clone https://github.com/discourse/discourse-bbcode.git
          - git clone https://github.com/discourse/discourse-signatures.git
          - git clone https://github.com/discourse/discourse-reactions.git
          - git clone https://github.com/paviliondev/discourse-legal-tools.git
          - git clone https://github.com/discourse/discourse-patreon.git
          - git clone https://github.com/discourse/discourse-yearly-review.git
          - git clone https://github.com/discourse/discourse-user-notes.git
          - git clone https://github.com/merefield/discourse-user-network-vis.git
          - git clone https://github.com/discourse/discourse-calendar.git
          - git clone https://github.com/discourse/discourse-prometheus.git

WARNING:
You have what appear to be non-official plugins.
If you are having trouble, you should disable them and try rebuilding again.

See https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb for the official list.

========================================
Discourse 3.1.0.beta4
Discourse version at OMITTED: Discourse 3.1.0.beta4
Discourse version at localhost: Discourse 3.1.0.beta4


==================== MEMORY INFORMATION ====================
RAM (MB): 31550

               total        used        free      shared  buff/cache   available
Mem:           30088        3958        1307        4269       24823       21475
Swap:           8191        1140        7051

==================== DISK SPACE CHECK ====================
---------- OS Disk Space ----------
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       194G   93G   91G  51% /

---------- Container Disk Space ----------
Filesystem      Size  Used Avail Use% Mounted on
overlay         194G   93G   91G  51% /
/dev/sda3       194G   93G   91G  51% /shared
/dev/sda3       194G   93G   91G  51% /var/log

==================== DISK INFORMATION ====================
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: OMITTED

Device       Start       End   Sectors  Size Type
/dev/sda1     2048      4095      2048    1M BIOS boot
/dev/sda2     4096   4194303   4190208    2G Linux filesystem
/dev/sda3  4194304 419428351 415234048  198G Linux filesystem

==================== END DISK INFORMATION ====================

==================== MAIL TEST ====================
For a robust test, get an address from http://www.mail-tester.com/
Or just send a test message to yourself.
Email address for mail test? ('n' to skip) [OMITTED]: n
Mail test skipped.
Replacing: SMTP_PASSWORD
Replacing: LETSENCRYPT_ACCOUNT_EMAIL
Replacing: DEVELOPER_EMAILS
Replacing: DISCOURSE_DB_PASSWORD
Replacing: Sending mail to

==================== DONE! ====================

Danke @JammyDodger, hab nicht bemerkt, dass ich im Support bin :+1:

1 „Gefällt mir“

Kurz gesagt, ich würde sagen:

  • Machen Sie sich keine Sorgen über die CPU-Auslastung, es sei denn, sie sättigt alle Kerne.
  • Machen Sie sich keine Sorgen über die RAM-Auslastung, sondern machen Sie sich Sorgen über die Swap-Aktivität.
  • Beginnen Sie wahrscheinlich einen neuen Thread über das 10-fache Wachstum der DB-Größe.

Wenn Ihr System Swap-Aktivitätsmetriken anbietet, verwenden Sie diese. Wenn nicht, suchen Sie nach Festplattenaktivität auf dem Gerät, das den Swap-Speicher enthält.

Verstanden, bei viel RAM habe ich gelesen, dass man sich nicht zu viele Sorgen um SWAP machen muss, also habe ich 8 GB erstellt, nur um nicht ganz ohne “Sicherheitsnetz” dazustehen, wenn das Sinn ergibt.

Können Sie etwas genauer erläutern, worüber ich mir in Bezug auf die Swap-Aktivität Sorgen machen sollte?

Alles, was ich im Dashboard bezüglich SWAP finden konnte, ist dies:

Und das ist der vollständige Speicher-Stack:

Ich bin es gewohnt, beruflich mit Containern/k8s zu arbeiten, daher sind mir diese Details auf VM-Ebene, worauf ich achten soll, nicht ganz klar.

Wenn Sie einige Einsteiger-Links haben und keine Abhandlung schreiben möchten/keine Zeit haben, wird das trotzdem geschätzt :slight_smile:

Vielen Dank für die Bilder – ich würde hauptsächlich das obere Bild, die Seiten pro Sekunde, beobachten. Wenn Sie anhaltende Aktivität sehen, benötigen Sie mehr Arbeitsspeicher. Kurze Spitzen, wie wir sie auf Ihrem Bild sehen, sind in Ordnung. Der Maximalwert, den Sie haben, liegt unter 1000, und vermutlich ist Ihr System gesund. Achten Sie also auf anhaltende Aktivität, die beispielsweise 500 Seiten pro Sekunde überschreitet.

Grundsätzlich ist RAM schnell und Swap langsam. Das Betriebssystem nutzt den RAM so gut wie möglich, und deshalb ist „ungenutzter RAM“ nicht einfach zu messen oder zu bedenken. In Ihrem Fall ist der große rote Anteil RAM, der zum Caching von Festplatteninhalten verwendet wird, was die Anwendungsleistung verbessert. Wenn dieser grüne Anteil mehr als etwa drei Viertel ausmacht, wäre das besorgniserregend. Vielleicht wäre für einige Workloads mehr als die Hälfte besorgniserregend.

Was die Leistung jedoch wirklich beeinträchtigt, ist die Swap-Aktivität, da Swap langsam ist. Eine statische Menge an Swap-Nutzung ist nicht wichtig: Das ist der obere Teil, der violette. In Ihrem Fall liegt die maximale Swap-Nutzung unter 2 GB, verglichen mit Ihren 8 GB – Sie haben viel Kapazität. Wenn die maximale Swap-Nutzung nahe an dem Swap-Speicherplatz liegt, den Sie haben, könnte ein Systemabsturz unmittelbar bevorstehen. Andernfalls ist es kein Problem.

Achten Sie also auf anhaltende Swap-Aktivität oder darauf, dass der rote Festplatten-Cache durch die grüne Anwendungsnutzung verdrängt wird.

2 „Gefällt mir“

Vielen Dank für die ausführliche Erklärung, Ed, sehr geschätzt. Ich werde später mit Benachrichtigungen herumspielen, das war also wirklich hilfreich :slight_smile:

2 „Gefällt mir“