提问人:Brad Solomon 提问时间:10/31/2019 最后编辑:Brad Solomon 更新时间:11/16/2023 访问量:6062
Gunicorn 或 uwsgi 都比 Django WSGI 服务器慢 ~30 倍
Gunicorn or uwsgi both ~30x slower than Django WSGI server
问:
我有一个 Django 应用程序。它使用 Nginx,位于 EC2 实例上,并在该实例前面使用 AWS 负载均衡器。Nginx 直接从磁盘提供静态文件,并用于其他所有路由到 WSGI 应用程序服务器。proxy_pass
我看到的是WSGI服务器的选择,结果令人费解。
当我使用 Django 的开发服务器时,生成的 HTML 文档的平均响应时间为 60-70 毫秒:./manage.py runserver 0.0.0.0:8000
/
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)
答:
0赞
JW Zhu
11/16/2023
#1
原因或多或少与独角兽worker_class模式有关。如果你把它设置为“gevent”,在我测试它之后,它将执行与Django WSGI服务器相同的速度。
# cat gunicorn_config.py
worker_class = 'gevent'
workers = 32
评论
WORKERCLASS
sync
gunicorn --log-level DEBUG --bind 0.0.0.0:8000 --workers 4 -k "gevent" project.wsgi
gunicorn
uwsgi
gunicorn