Bra*_*mon 9 python django nginx python-3.x gunicorn
我有一个 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
Run Code Online (Sandbox Code Playgroud)
现在,当我用“合适的” 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
Run Code Online (Sandbox Code Playgroud)
在这里,我将 Gunicorn 运行为:
gunicorn \
--log-level DEBUG \
--bind 0.0.0.0:8000 \
--workers 4 \
project.wsgi
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
而且,值得注意的是,无论工作人员的数量是否多得多,响应时间都不会改变,例如--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)
Run Code Online (Sandbox Code Playgroud)
小智 1
原因或多或少与Gunicorn的worker_class模式有关。如果你将其设置为“gevent”,经过我测试,它将执行与Django WSGI服务器相同的速度。
# cat gunicorn_config.py
worker_class = 'gevent'
workers = 32
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4112 次 |
| 最近记录: |