Discourse Docker HW réservé/utilisé (CPU, RAM, Disque) et comment le gérer

J’ai utilisé ce week-end pour installer des outils externes sur la VM qui exécute notre installation Discourse (grafana, prometheus, quelques exportateurs) ainsi que des analyses (matomo) et pour configurer les sauvegardes dans un emplacement externe (AWS S3). Cela fait deux mois depuis notre migration et j’ai enfin eu du temps libre pour le faire.

Après quelques jours pour laisser les métriques et autres données se stabiliser, je suis retourné vérifier et j’ai remarqué que le conteneur exécutant Discourse consomme pratiquement toute la RAM disponible selon cadvisor :

Ce qui est étrange pour moi car en vérifiant à partir d’autres sources, cela ne semble pas être le cas. Cependant, j’ai remarqué que d’autres aspects présentent encore des éléments que j’aimerais mieux comprendre.

L’utilisation du CPU, par exemple, présente des pics mais a tendance à rester en moyenne bien au-dessus de 100% presque tout le temps :

Cependant, voici la sortie de 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

En parcourant ce forum, j’ai déjà essayé de réduire le nombre de processus unicorn de la détection automatique (8) à 4, mais je ne vois aucun changement pertinent en termes d’utilisation CPU/mémoire.

Enfin, lorsque nous avons importé notre base de données de vbulletin3 vers Discourse, la base de données elle-même pesait environ 7 Go. En vérifiant aujourd’hui, je constate qu’elle a décuplé.

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

Je suppose que c’est PostgreSQL qui fait son travail en arrière-plan et crée énormément de données supplémentaires, mais y a-t-il quelque chose qui puisse être fait pour au moins le contrôler ?

Sortie de Discourse Doctor au cas où cela pourrait aider :

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! ====================

Merci @JammyDodger, je n’avais pas remarqué que j’étais dans Support :+1:

1 « J'aime »

Brièvement, je dirais

  • ne vous inquiétez pas de l’utilisation du CPU, sauf si elle sature tous les cœurs.
  • ne vous inquiétez pas de l’utilisation de la RAM, inquiétez-vous plutôt de l’activité du swap.
  • commencez probablement un nouveau fil de discussion sur la croissance de la taille de la base de données par 10x

Si votre système offre des métriques d’activité de swap, utilisez-les. S’il n’en offre pas, recherchez l’activité du disque sur le périphérique contenant l’espace de swap.

Compris, avec beaucoup de RAM, j’avais lu qu’il ne fallait pas trop s’inquiéter du SWAP, alors j’en ai créé 8 Go juste pour ne pas être totalement sans “filet de sécurité”, si cela a du sens.

Pouvez-vous développer un peu plus sur ce qui devrait m’inquiéter en termes d’activité SWAP ?

Tout ce que j’ai pu trouver concernant le SWAP sur le tableau de bord est ceci :

Et voici la pile mémoire complète :

J’ai l’habitude de travailler avec des conteneurs/k8s pour le travail, donc ces détails au niveau de la VM m’échappent quant à ce que je suis censé surveiller.

Si vous avez des liens d’introduction et que vous ne voulez pas / n’avez pas le temps d’écrire un essai ici, c’est toujours apprécié :slight_smile:

Merci pour les images. Je surveillerais principalement celle du haut, les pages par seconde. Si vous constatez une activité soutenue, vous aurez besoin de plus de mémoire. Des pics courts comme ceux que nous voyons sur votre image ne posent pas de problème. Le chiffre maximum que vous avez est inférieur à 1000, et votre système est vraisemblablement sain. Surveillez donc une activité soutenue dépassant, disons, 500 pages par seconde.

Essentiellement, la RAM est rapide et le swap est lent. Le système d’exploitation utilisera autant de RAM que possible, et c’est pourquoi la « RAM inutilisée » n’est pas facile à mesurer ou à comprendre. Dans votre cas, la grande proportion rouge est la RAM utilisée pour mettre en cache le contenu du disque, ce qui améliore les performances des applications. Si cette proportion verte dépassait, disons, les trois quarts, ce serait inquiétant. Peut-être que pour certaines charges de travail, plus de la moitié serait inquiétante.

Mais ce qui nuit vraiment aux performances, c’est l’activité du swap, car le swap est lent. Une certaine quantité d’utilisation du swap n’est pas importante : c’est la tranche supérieure, celle en violet. Dans votre cas, l’utilisation maximale du swap est inférieure à 2 Go, par rapport à vos 8 Go - vous avez beaucoup de capacité. Si l’utilisation maximale du swap s’approche de la quantité d’espace de swap dont vous disposez, un crash système pourrait être imminent. Sinon, ce n’est pas une préoccupation.

Surveillez donc l’activité soutenue du swap, ou le cache disque rouge qui est réduit par l’utilisation des applications en vert.

2 « J'aime »

Merci beaucoup pour cette explication détaillée Ed, j’apprécie beaucoup. Je vais jouer avec les alertes plus tard, donc c’était vraiment utile :slight_smile:

2 « J'aime »