我目前有一个 Apache2 服务器,mpm-prefork它mod_php在 OpenVZ VPS 上运行,具有 512M 真实/1024M 可爆内存(无交换)。运行一些测试后,我发现 Apache 获得的最大进程大小是 23M,所以我设置MaxClients为 25(23M x 25 = 575 MB,对我来说还可以)。我决定在我的服务器上运行一些负载测试,结果让我感到困惑。
我ab在我的台式机上使用从 wordpress 博客请求主页。
当我运行ab24 个并发连接时,一切似乎都很好。当然,CPU 上升,空闲 RAM 下降,结果是每个请求的响应时间约为 2-3 秒。
但是如果我运行ab25 个并发连接(我的服务器限制),Apache 会在几秒钟后挂起。它开始处理请求,然后停止响应,CPU 回到 100% 空闲并ab超时。Apache 日志说它已达到MaxClients.
发生这种情况时,Apache 将自己锁定在 25 个正在运行的进程中(如果我检查服务器状态,它们都处于“W”状态)并且只有在TimeOut设置后进程开始死亡并且服务器再次开始响应(在我的情况下它已设置到 45)。
我的问题:这是预期的行为吗?为什么 Apache 到达时就死了MaxClients?如果它适用于 24 个连接,它不应该适用于 25 个连接,只是花更多的时间来响应每个请求并将其余的排队?
对我来说,任何一个正在运行的孩子ab都可以通过设置与服务器的并发连接来单独杀死一个网络服务器,这对我来说有点奇怪MaxClients。