AB 请求失败 - 我该怎么办?

AB 请求失败 - 我该怎么办?

所以,过去我从未遇到过此应用程序的任何问题。所有基准测试的成功率均为 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 上某人给出的更好的解释:

使用 AB 进行负载测试…虚假失败请求(长度)

相关内容