我使用prefork. Apache 每天收到大约 100k-200k 的请求,其中大约 100-200 个达到超时限制(所以大约千分之一),几乎所有其他请求都远低于超时。
我该怎么做才能找出发生这种情况的原因?或者所有请求的一些小部分超时是否正常?
这是我到目前为止所做的:

可以看出,在超时限制和更合理的请求之间的请求很少。目前超时限制设置为 50 秒,之前设置为 300 并且情况仍然相同,有一些超时,然后与其他请求存在巨大差距。
所有超时的AJAX请求都是请求,但绝大多数都是请求,所以这可能更多是巧合。Apache 返回码为200,但显然已达到超时限制。它们来自各种不同的 IP。
我查看了超时的请求,它们没有什么特别之处,如果我执行相同的请求,它们会在不到一秒钟的时间内完成。
我试图查看不同的资源,看看我是否能找到原因,但没有运气。总是有足够的空闲内存(最低大约 3GB 空闲),负载有时高达 1.4,CPU 利用率高达 40%,但许多超时发生在负载和 CPU 利用率低时。磁盘写入/读取在白天几乎保持不变。MySQL 慢查询日志中没有条目(设置为记录 1 秒以上的任何内容),无请求使用那么多数据库写入/读取。

蓝色是 CPU 利用率,峰值为 40%,栗色是负载,峰值为 1.4。所以我们可以看到,即使 CPU 利用率/负载较低,也会出现超时(十秒峰值与 CPU 利用率很好地对应,但这是另一个问题,我更有希望找出可能导致这些问题的原因)。
Apache 错误日志中没有错误,我还没有看到它达到超过 200 个活动的 Apache 进程。
Timeout 50
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2
<IfModule mpm_prefork_module>
ServerLimit 350
StartServers 20
MinSpareServers 75
MaxSpareServers 150
MaxClients 320
MaxRequestsPerChild 5000
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我更新到 Ubuntu 12.04.1,以防万一,没有变化。我添加了 mod_reqtimeout 设置: …