Gunicorn или uwsgi оба ~ в 30 раз медленнее, чем сервер Django WSGI - PullRequest
2 голосов
/ 31 октября 2019

У меня есть приложение Django. Он использует Nginx, сидит на экземпляре EC2 и использует балансировщик нагрузки AWS перед этим. Nginx обслуживает статические файлы прямо с диска, а также использует proxy_pass для всего остального для маршрутизации на сервер приложений WSGI.

Это выбор сервера WSGI, для которого я вижу удивительные результаты.

Когда я использую сервер разработки Django, ./manage.py runserver 0.0.0.0:8000, среднее время ответа для итогового HTML-документа при / составляет 60-70 мс :

Blocked: 1 ms
DNS resolution: 0 ms
Connecting: 0 ms
TLS setup: 0 ms
Sending: 0 ms
Waiting: 68 ms
Receiving: 0 ms

Теперь, когдаЯ заменяю его «правильным» сервером Gunicorn, среднее время ответа на тот же запрос / документ теперь составляет 1800 мс !

Blocked: 1 ms
DNS resolution: 0 ms
Connecting: 0 ms
TLS setup: 0 ms
Sending: 0 ms
Waiting: 1859 ms
Receiving: 0 ms

Здесь я запускаю Gunicorn как:

gunicorn \
    --log-level DEBUG \
    --bind 0.0.0.0:8000 \
    --workers 4 \
    project.wsgi

То же самое относится и к uwsgi, со средним временем отклика 1850 мс :

uwsgi --chdir=/home/ubuntu/project \
    --module=project.wsgi:application \
    --env DJANGO_SETTINGS_MODULE=project.settings \
    --master \
    --http-socket 0.0.0.0:8000 \
    --processes=5 \
    --max-requests=5000 \
    --vacuum

И, в частности, время отклика не меняетсянезависимо от того, намного ли больше число работников, например, --workers 64 (и я бы этого не ожидал, поскольку речь идет не о параллельных запросах).

Что, вероятно, объясняет эту разницу? Я влюбился в какую-то распространенную ловушку?

Версии:

$ python -m django --version
2.2.6
$ gunicorn --version
gunicorn (version 19.9.0)
$ nginx -v
nginx version: nginx/1.14.0 (Ubuntu)
...