Мое приложение Django 1.8 с nginx и gunicorn на двухпроцессорном компьютере Debian с 21 ГБ памяти и 128 ГБ памяти.База данных находится на отдельном сервере.
В большинстве случаев это работает нормально, но я получаю множество случайных 502
ошибок при высоких нагрузках, когда серверу необходимо обработать примерно больше, чем 60 req/sec
, изагрузка сервера превышает 20
.
Вот мой текущий конфиг Gunicorn:
#!/bin/bash
NAME="myapp"
SOCKFILE=/tmp/gunicorn.sock
USER=me
GROUP=www-data
NUM_WORKERS=49
DJANGO_SETTINGS_MODULE=myapp.settings
DJANGO_WSGI_MODULE=myapp.wsgi
MAX_REQ=220000
REQ_TIMEOUT=30
LOG_FILE=/var/log/gunicorn/error.log
echo "Starting $NAME as `whoami`"
cd $DJANGODIR
source /path/to/.myappenv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
themselves (do not use --daemon)
exec /path/to/.myappenv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=error \
--log-file $LOG_FILE \
--max-requests=$MAX_REQ \
--timeout=$REQ_TIMEOUT
/var/log/gunicorn/error.log
показывает много:
[2019-03-28 01:30:27 +0000] [11457] [CRITICAL] WORKER TIMEOUT (pid:13481)
[2019-03-28 01:30:27 +0000] [11457] [CRITICAL] WORKER TIMEOUT
В то жевремя, база данных базы данных (которая находится на другом сервере, довольно крутая и никогда не достигает max_connections
. Так что не похоже, что проблема заключается в отсутствии соединений с БД для обработки запросов http.
Я пробовал многоразличные комбинации REQ_TIMEOUT
(от 30-120) NUM_WORKERS
(от 21 до 49)) и MAX_REQ
(от 200 до 220000), но ни одна из них не смогла решить проблему.Так что цените ваши советы о том, как справиться с этой проблемой.