我有一个Django应用。它使用Nginx,位于EC2示例上,并在前面使用AWS负载均衡器。Nginx直接从磁盘提供静态文件,并使用proxy_pass
将其他所有内容路由到WSGI应用服务器。
我看到的令人困惑的结果是WSGI服务器的选择。
当我使用Django的开发服务器./manage.py runserver 0.0.0.0:8000
时,在/
上生成的HTML文档的平均响应时间是60-70 ms:
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 ms!
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 ms:
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)
型
1条答案
按热度按时间gstyhher1#
原因或多或少与Gunicorn的worker_class模式有关,如果设置为“gevent”,经过我的测试,它的运行速度和Django WSGI服务器一样。
字符串