为什么20个请求并行执行比10x2慢?

为什么20个请求并行执行比10x2慢?

这个问题困扰着我,我认为我自己无法找到答案,所以我认为最好寻求帮助。

当我做:

root@server1:~$ ab -n 20 -c 20 http://www.testserver.com/

持续时间为4秒。

当我(同时)这样做时:

root@server1:~$ ab -n 10 -c 10 http://www.testserver.com/
root@server2:~$ ab -n 10 -c 10 http://www.testserver.com/

合计时长为2.5秒。

我认为测试服务器不会受到请求来源位置的影响,并且我认为测试服务器、服务器 1 和服务器 2 没有达到其带宽上限(页面不是那么重)。

这是怎么回事?答案可能真的很愚蠢,但无论如何我都会很高兴。

答案1

有些类型的负载并发性增加会导致性能下降。我首先想到的是顺序硬盘读取 - 如果你有一个读取大文件的线程,你将获得最佳的整体性能。

您需要调查您的服务器负载并找出瓶颈。

此外,10 个请求太少,无法得出任何结论。正确的测试需要您监控系统进程并确定系统的预热期,此时您的负载因素已稳定。预热后,您可以运行实际测试,并对其结果进行统计研究,以确保其有效。

答案2

当你运行 1 个进程时,整个 CPU 只为该进程工作。(好吧,还有一些为内核工作)。当你运行 2 个进程时,内核必须在它们之间切换,每次切换时它都必须将一些数据存储到 RAM,然后检索它,这会导致一些开销,因此 - 进程越多 - 开销越大。

此外,这取决于当前启动了多少个 Apache Worker。如果正在运行 10 个,它们只需为页面提供服务。如果启动 20 个并行连接,则必须启动另外 10 个 Worker,这会占用资源(或者请求必须等待)。

相关内容