无法扩展 Gunicorn/Flask HelloWorld 超过 125 RPS
Unable to scale Gunicorn/Flask HelloWorld over 125 RPS
我有一个 Flask 应用程序,我无法在本地扩展到超过 125 RPS。这是一个简单的 'hello world' ,如下所示。
我正在使用 Locust.io 负载测试工具。我已将相同的负载测试指向本地 Golang hello world,并且能够达到 1000 的 RPS。恕我直言,这排除了我的 Locust 和 OS 配置作为潜在瓶颈。
我使用 17 个 worker,因为我的机器有 8 个内核((2*CPU)+1
是 Gunicorn 文档推荐的)
根据我的阅读,使用 Gunicorn 的 gevent
worker 类型应该可以让我达到 1000 的 RPS,就像使用 Golang 一样。这是一个正确的假设吗?还是我遗漏了一些重要的东西?
缩写代码:
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello world!'
Gunicorn 会议:
gunicorn -k gevent -w 17 --worker-connections 100000 app:app
Locust 负载测试结果。每个 'user' 每 4 秒获取一次 '/'
此处作者的回答:https://github.com/benoitc/gunicorn/issues/305
又调试了一周,终于搞定了!原来还有一个额外的工人类型,gevent_pywsgi
。使用这种工人类型将吞吐量提高了大约 10 倍,达到我认为可以接受的水平。
我的测试显示 sync
worker 和 gevent
worker 之间的性能没有差异,所以我仍然不确定那里发生了什么,或者 [=12= 的意图是什么] 工人类型是。
我有一个 Flask 应用程序,我无法在本地扩展到超过 125 RPS。这是一个简单的 'hello world' ,如下所示。
我正在使用 Locust.io 负载测试工具。我已将相同的负载测试指向本地 Golang hello world,并且能够达到 1000 的 RPS。恕我直言,这排除了我的 Locust 和 OS 配置作为潜在瓶颈。
我使用 17 个 worker,因为我的机器有 8 个内核((2*CPU)+1
是 Gunicorn 文档推荐的)
根据我的阅读,使用 Gunicorn 的 gevent
worker 类型应该可以让我达到 1000 的 RPS,就像使用 Golang 一样。这是一个正确的假设吗?还是我遗漏了一些重要的东西?
缩写代码:
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello world!'
Gunicorn 会议:
gunicorn -k gevent -w 17 --worker-connections 100000 app:app
Locust 负载测试结果。每个 'user' 每 4 秒获取一次 '/'
此处作者的回答:https://github.com/benoitc/gunicorn/issues/305
又调试了一周,终于搞定了!原来还有一个额外的工人类型,gevent_pywsgi
。使用这种工人类型将吞吐量提高了大约 10 倍,达到我认为可以接受的水平。
我的测试显示 sync
worker 和 gevent
worker 之间的性能没有差异,所以我仍然不确定那里发生了什么,或者 [=12= 的意图是什么] 工人类型是。