首页 > 解决方案 > 无法将 Gunicorn/Flask HelloWorld 扩展到超过 125 RPS

问题描述

我有一个 Flask 应用程序,我无法在本地扩展超过 125 RPS。这是一个简单的“hello world”,如下所示。

我正在使用 Locust.io 负载测试工具。我已经将相同的负载测试指向本地 Golang hello world,并且能够进入 1000 的 RPS。恕我直言,这排除了我的 Locust 和操作系统配置作为潜在的瓶颈。

我使用 17 名工人,因为我的机器有 8 个内核((2*CPU)+1Gunicorn 文档推荐)

根据我的阅读,使用 Gunicorn 的geventworker 类型应该可以让我达到 1000 的 RPS,就像使用 Golang 一样。这是一个正确的假设吗?还是我错过了一些关键的东西?

缩写代码:

app = Flask(__name__)

@app.route('/')
def hello():
    return 'hello world!'

独角兽会议:

gunicorn -k gevent -w 17  --worker-connections 100000 app:app

蝗虫负载测试结果。每个“用户”每 4 秒获取一次“/” 在此处输入图像描述

在此处输入图像描述

标签: pythonperformanceflaskgunicornlocust

解决方案


作者在这里的回答:https ://github.com/benoitc/gunicorn/issues/305

经过一周的调试,我想通了!原来有一个额外的工人类型,gevent_pywsgi. 使用这种工人类型大约增加了 10 倍,达到我认为可以接受的水平。

sync我的测试显示工人和工人之间的性能没有差异gevent,所以我仍然不确定那里发生了什么,或者gevent工人类型的意图是什么。


推荐阅读