有N个worker的Python web应用程序不将QPS乘以N?

2024-09-29 21:21:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个同步的,单进程的web应用程序,CPU限制为2200个QPS。当我使其多处理时,QPS只显示有限的增加:

  • 单流程:2200 QPS。top显示CPU为100%
  • 2名工人:2230名QPS。top显示每个进程的60%
  • 4名工人:2280名QPS。top显示每个进程的30%

我不明白这些数字。为什么两个进程不把QPS乘以2?四道工序?在

实施细节

  • web应用程序正在响应GET请求。我用了Falcon,它是这个example from the documentation的复制粘贴
  • 服务器正在gunicorn后面运行。以下是以下命令行:
    • 单进程:gunicorn things:app
    • 两个工人:gunicorn things:app -w 2
    • 四个工人:gunicorn things:app -w 4
  • 我使用^{}来执行负载测试并测量得到的qp。配置:一主五从。每个GET请求之间的等待时间:0毫秒
  • 一切都在localhost上运行。测试机有16个内核,因此web应用程序的每个进程和负载测试的每个进程都使用自己的内核。在

还有一些结果

正如dano建议的那样,我在GET处理程序中插入了一个time.sleep。结果如下:

QPS as a function of the number of workers and sleep


Tags: webapp应用程序get进程top数字流程
1条回答
网友
1楼 · 发布于 2024-09-29 21:21:26

似乎您已经达到了locust向服务器发送查询的速度限制(或者可能是gunicorn将请求分发给工作人员的能力)。由于没有网络延迟,而且服务器几乎不做任何工作(因此响应时间非常快),所以您可以像rocast发送查询一样快速地响应。在

gunicorn文件strongly recommend running it behind NGINX。也许可以试试看这对性能的影响。在

相关问题 更多 >

    热门问题