Discourse Docker HW reservado/usado (CPU, RAM, Disco) e como gerenciar

Usei este fim de semana para instalar algumas ferramentas externas na VM que executa nossa instalação do Discourse (grafana, prometheus, alguns exportadores), bem como algumas análises (matomo) e para configurar os backups em um local externo (AWS S3). Já se passaram dois meses desde a nossa migração e finalmente tive algum tempo livre para fazer isso.

Depois de alguns dias para que as métricas e outras coisas “assentassem”, voltei para verificar e notei que o contêiner que executa o Discourse está consumindo basicamente toda a RAM disponível, de acordo com o cadvisor:

O que é estranho para mim, pois, verificando de outras fontes, não parece ser o caso. No entanto, notei que outros aspectos ainda têm algumas coisas que eu gostaria de entender melhor.

O uso da CPU, por exemplo, tem picos, mas tende a permanecer em média bem acima de 100% quase o tempo todo:

No entanto, esta é a saída do 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

Lendo neste fórum, já tentei reduzir o número de processos unicorn de 8 (detecção automática) para 4, mas não vejo nenhuma mudança relevante em termos de CPU/Memória usada.

Por último, mas não menos importante, quando importamos nosso banco de dados do vbulletin3 para o discourse, o próprio banco de dados tinha cerca de 7 GB. Verificando hoje, posso ver que ele cresceu dez vezes.

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

Suponho que seja o postgresql fazendo seu trabalho em segundo plano e criando muitos dados extras, mas há algo que possa ser feito para pelo menos controlá-lo?

Saída do Discourse Doctor caso possa ajudar:

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

Obrigado @JammyDodger, não percebi que estava em Support :+1:

1 curtida

Resumidamente, eu diria:

  • não se preocupe com o uso da CPU, a menos que esteja saturando todos os núcleos.
  • não se preocupe com o uso de RAM, preocupe-se com a atividade de swap.
  • provavelmente inicie um novo tópico sobre o tamanho do banco de dados crescendo 10x.

Se o seu sistema oferece métricas de atividade de swap, use-as. Se não oferecer, procure por atividade de disco no dispositivo que contém o espaço de swap.

Entendi, com muita RAM eu li por aí para não me preocupar muito com SWAP, então criei 8GB apenas para não ficar totalmente sem uma “rede de segurança”, se é que isso faz sentido.

Você pode elaborar um pouco mais sobre o que devo me preocupar em termos de atividade de SWAP?

Qualquer coisa relacionada a SWAP que eu pude encontrar no painel é isto:

E esta é a pilha completa de memória:

Estou acostumado a trabalhar com contêineres/k8s no trabalho, então esses detalhes em nível de VM me escapam em termos do que devo observar.

Se você tiver alguns links de nível de entrada e não quiser / não tiver tempo para escrever um ensaio aqui, ainda assim é apreciado :slight_smile:

Obrigado pelas imagens. Eu monitoraria principalmente a de cima, as páginas por segundo. Se você vir atividade sustentada, precisará de mais memória. Picos curtos como os que vemos na sua foto são aceitáveis. O valor máximo que você tem está abaixo de 1000 e, presumivelmente, seu sistema está saudável. Portanto, observe a atividade sustentada excedendo, digamos, 500 páginas por segundo.

Essencialmente, a RAM é rápida e o swap é lento. O sistema operacional fará o máximo uso da RAM que puder, e é por isso que a “RAM não utilizada” não é fácil de medir ou pensar. No seu caso, a grande proporção vermelha é a RAM usada para cache de conteúdo de disco, o que ajuda no desempenho do aplicativo. Se essa proporção verde crescesse para mais de, digamos, três quartos, seria preocupante. Talvez para algumas cargas de trabalho, mais da metade seria preocupante.

Mas o que realmente prejudica o desempenho é a atividade de swap, porque o swap é lento. Uma quantidade estática de uso de swap não é importante: essa é a fatia superior, a roxa. No seu caso, o uso máximo de swap está abaixo de 2G, em comparação com seus 8G - você tem muita capacidade. Se o uso máximo de swap chegar perto da quantidade de espaço de swap que você tem, você pode ter uma falha iminente no sistema. Caso contrário, não é uma preocupação.

Portanto, observe a atividade de swap sustentada ou o cache de disco vermelho sendo espremido pelo uso do aplicativo verde.

2 curtidas

Muito obrigado pela explicação detalhada, Ed, agradeço muito. Vou brincar com os alertas mais tarde, então isso foi muito útil :slight_smile:

2 curtidas