Merge pull request #1669 from treescape-io/improved_worker_count

Configurable worker count. Closes #1668.
pull/1683/head
Piero Toffanin 2025-05-13 13:42:33 -04:00 zatwierdzone przez GitHub
commit d4a4b84372
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
4 zmienionych plików z 29 dodań i 3 usunięć

Wyświetl plik

@ -34,6 +34,7 @@ services:
- WO_DEV - WO_DEV
- WO_DEV_WATCH_PLUGINS - WO_DEV_WATCH_PLUGINS
- WO_SECRET_KEY - WO_SECRET_KEY
- WEB_CONCURRENCY
restart: unless-stopped restart: unless-stopped
oom_score_adj: 0 oom_score_adj: 0
broker: broker:
@ -54,5 +55,6 @@ services:
- WO_BROKER - WO_BROKER
- WO_DEBUG - WO_DEBUG
- WO_SECRET_KEY - WO_SECRET_KEY
- WEB_CONCURRENCY
restart: unless-stopped restart: unless-stopped
oom_score_adj: 250 oom_score_adj: 250

Wyświetl plik

@ -20,7 +20,7 @@ djangorestframework-guardian==0.3.0
drf-nested-routers==0.11.1 drf-nested-routers==0.11.1
funcsigs==1.0.2 funcsigs==1.0.2
futures==3.1.1 futures==3.1.1
gunicorn==19.8.0 gunicorn==23.0.0
geodeep==0.9.8 geodeep==0.9.8
itypes==1.1.0 itypes==1.1.0
kombu==4.6.7 kombu==4.6.7

Wyświetl plik

@ -144,10 +144,22 @@ else
conf="nginx-ssl.conf" conf="nginx-ssl.conf"
fi fi
# Only set if `WEB_CONCURRENCY` is not defined, allows overriding.
# See: https://docs.gunicorn.org/en/latest/settings.html#workers
if [ -z "$WEB_CONCURRENCY" ]; then
# Default gunicorn worker count to 2 x availabe cores + 1
# nproc gives _available_ (rather than physicall present) CPU cores.
CPU_COUNT=$(nproc)
export WEB_CONCURRENCY=$((2*$CPU_COUNT+1))
echo "Setting WEB_CONCURRENCY based on $CPU_COUNT available CPU cores to start $WEB_CONCURRENCY gunicorn workers."
else
echo "Using pre-defined WEB_CONCURRENCY override to start $WEB_CONCURRENCY gunicorn workers."
fi
congrats congrats
nginx -c $(pwd)/nginx/$conf nginx -c $(pwd)/nginx/$conf
gunicorn webodm.wsgi --bind unix:/tmp/gunicorn.sock --timeout 300000 --max-requests 500 --workers $((2*$(grep -c '^processor' /proc/cpuinfo)+1)) --preload gunicorn webodm.wsgi --bind unix:/tmp/gunicorn.sock --timeout 300000 --max-requests 500 --workers $WEB_CONCURRENCY --preload
fi fi
# If this is executed, it means the previous command failed, don't display the congratulations message # If this is executed, it means the previous command failed, don't display the congratulations message

Wyświetl plik

@ -45,6 +45,18 @@ environment_check(){
echo -e "\033[91mWO_BROKER environment variable is not set. Defaulting to redis://localhost\033[39m" echo -e "\033[91mWO_BROKER environment variable is not set. Defaulting to redis://localhost\033[39m"
export WO_BROKER=redis://localhost export WO_BROKER=redis://localhost
fi fi
# Only set if `WEB_CONCURRENCY` is not defined, allows overriding.
# See: https://docs.gunicorn.org/en/latest/settings.html#workers
if [ -z "$WEB_CONCURRENCY" ]; then
# Default gunicorn worker count to 2 x availabe cores + 1
# nproc gives _available_ (rather than physicall present) CPU cores.
CPU_COUNT=$(nproc)
export WEB_CONCURRENCY=$((2*$CPU_COUNT+1))
echo "Setting WEB_CONCURRENCY based on $CPU_COUNT available CPU cores to start $WEB_CONCURRENCY gunicorn workers."
else
echo "Using pre-defined WEB_CONCURRENCY override to start $WEB_CONCURRENCY gunicorn workers."
fi
} }
@ -52,7 +64,7 @@ start(){
action=$1 action=$1
echo "Starting worker using broker at $WO_BROKER" echo "Starting worker using broker at $WO_BROKER"
celery -A worker worker --autoscale $(grep -c '^processor' /proc/cpuinfo),2 --max-tasks-per-child 1000 --loglevel=warn > /dev/null celery -A worker worker --autoscale $WEB_CONCURRENCY,2 --max-tasks-per-child 1000 --loglevel=warn > /dev/null
} }
start_scheduler(){ start_scheduler(){