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