所以,过去我从未遇到过此应用程序的任何问题。所有基准测试的成功率均为 100%。昨天,我设置了 nginx 来服务器静态内容,并将其他请求传递给 apache。现在,如果我有 1 个并发用户 (-c 1),那么一切都很好。但似乎并发用户越多,我收到的失败请求就越多。不是很多,但可能在 350 个请求中大约有 10 个或 15 个。它们是“长度”,不管它是什么意思。使用浏览器访问网站,我完全没有遇到任何问题。我如何找出这些失败请求的原因?
这是我的 httpd.conf 的一部分:
Timeout 20
KeepAlive Off
MaxKeepAliveRequests 100
<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 3
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 1
MaxClients 50
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
您还需要其他信息吗?
答案1
我的猜测是,当您对网站进行基准测试时,您达到了 MaxClients 的限制。
在对站点进行基准测试时,尝试查看在端口 80 上建立了多少个连接:
netstat -tnap | grep ":80" | grep -c ESTA
在对网站进行基准测试时重复此命令几次。您可能会达到 50 个已建立的连接。
rrdtool 趋势应用程序(如 Cacti、Munin 或 Ganglia)绘制 TCP 连接数图表也有助于调试此类问题,因为您可以查看历史记录。
希望这可以帮助!
答案2
这些“长度”失败仅表示部分尝试的内容长度(应用程序提供的数据量)与第一个请求的长度不匹配。因此,如果 ab 第一次收到 100 个字节,然后接下来的 9 次收到 150 个字节,它将报告 9 次长度失败。
如果您正在提供动态内容,这些错误是预料之中的,可以安全地忽略。
Marco Ramos 的回答不正确,没有理由执行任何类似运行 netstat 的操作。
以下是 Stackoverflow 上某人给出的更好的解释: