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