Vai al contenuto

Limitare l'uso della CPU e della memoria

Nella configurazione consigliata basata su Docker, Gramps Web utilizza Gunicorn per servire il backend e Celery per i compiti in background. In entrambi i casi, possono essere eseguiti diversi processi worker in parallelo, il che rende l'applicazione più reattiva dal punto di vista dell'utente. Tuttavia, aumentare il numero di worker aumenta anche la quantità di RAM utilizzata (anche quando l'applicazione è inattiva) e consentire l'elaborazione delle richieste in parallelo può portare a un elevato utilizzo della CPU (in particolare quando molti utenti utilizzano l'applicazione simultaneamente). Sia Gunicorn che Celery consentono di limitare il numero di worker paralleli.

Ottenere informazioni sul tuo sistema

Su Linux, puoi controllare il numero di core disponibili sul tuo sistema con il seguente comando:

lscpu | grep CPU

Per vedere quanta memoria e spazio di swap hai disponibile, usa

free -h

Limitare il numero di worker di Gunicorn

Il modo più semplice per impostare il numero di worker di Gunicorn quando si utilizza l'immagine Docker predefinita di Gramps Web è impostare la variabile di ambiente GUNICORN_NUM_WORKERS, ad esempio dichiarandola nel file docker-compose.yml, sotto la sezione "environment".

services:
  grampsweb:
    environment:
      GUNICORN_NUM_WORKERS: 2

Consulta la documentazione di Gunicorn per decidere il numero ideale di worker.

Limitare il numero di worker di Celery

Per impostare il numero di worker di Celery, adatta l'impostazione concurrency nel file Docker compose:

  grampsweb_celery:
    command: celery -A gramps_webapi.celery worker --loglevel=INFO --concurrency=2

Consulta la documentazione di Celery per decidere il numero ideale di worker.

Info

Se il flag concurrency è omesso (cosa che è avvenuta nella documentazione di Gramps Web fino alla v2.5.0), esso predefinisce il numero di core CPU disponibili sul sistema, il che potrebbe consumare una quantità sostanziale di memoria.