AB的负载测试…伪造的失败请求(长度)


209

为了自己的好奇心,在我的服务器上进行一些负载测试:

ab -kc 50 -t 200 http://localhost/index.php

这将打开50个keep-alive连接200秒,并用index.php请求猛击我的服务器

结果显示:

Concurrency Level:      50
Time taken for tests:   200.007 seconds
Complete requests:      33106
Failed requests:        32951
   (Connect: 0, Receive: 0, Length: 32951, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      1948268960 bytes
HTML transferred:       1938001392 bytes
Requests per second:    165.52 [#/sec] (mean)
Time per request:       302.071 [ms] (mean)
Time per request:       6.041 [ms] (mean, across all concurrent requests)
Transfer rate:          9512.69 [Kbytes/sec] received

请注意32951“失败”的请求。我无法弄清楚。

在测试运行期间,尽管页面底部的页面加载时间报告为.5,而不是通常的.02,但我仍可以从家用计算机上完美访问我的网站。但是,我从未遇到过失败的请求。

那么,为什么AB会报告一半的连接失败?在这种情况下,“长度:”是什么意思?


您的网站是否有负载均衡器?请参阅我的有关使用负载均衡器进行负载测试的博客文章,它可能会解释负载测试中 “对我有用”的情况。
Patrick Lightbody

Answers:


361

没关系。“长度失败”仅表示响应时间长度的一半左右不同。

由于内容是动态的,因此可能是会话标识符或类似的东西。


8
嘿,我遇到了同样的“问题”,很高兴这个答案在这里。谢谢!
理查德·赫特

2
感谢您的回答,我也有完全相同的疑问。
赛义因州2010年

63
是的,两年后,这个答案仍然非常有用。
塞尔吉(Sergi)

11
不要将其归因于可变的内容长度不匹配。ab在摘要中未将HTTP状态代码500报告为错误。长度不匹配的原因可能是您有一个真正的错误。您可以使用-v 4来获取更多信息(更好的管道传输到文件,因为会有很多打印输出)。
塔尔列夫阿米(Tal Lev-Ami)

3
实际上,这里的ab手册对此进行了解释,网址为httpd.apache.org/docs/current/programs/ab.html “如果在测试过程中文档长度发生变化,则将响应视为错误。”
乔(Joe Joe)

132

换句话说,描述问题:

apache基准测试工具(ab)假设整个测试过程中响应内容的长度相同。它存储第一个响应的内容长度。如果任何其他响应具有不同的内容长度,则会导致“长度失败”。

以下Apache错误报告似乎可以确认:ASF错误42040

摘要:如果您正在提供可变长度的任何内容,则您可能应该忽略这种Ab请求失败。

编辑:我最近注意到该ab命令具有一个新的(至少对我来说)选项:

-l   Accept variable document length (use this for dynamic pages)

我可以在ab 2.3版<$ Revision:1528965 $>中看到它,但在ab 2.3版<$ Revision:655654 $>中看不到它,所以它可能是最近才添加的。


4
对于Mac上的任何人,您的ab版本都有可能落后,而-l是不可能的。您可以从源代码或通过homebrew安装,但是“ brew install ab”不起作用,因为它是apache软件包的一部分-您可以使用“ brew install homebrew / apache / ab”安装。
netpoetica 2015年

8

抱歉,我想复活一个旧问题,但这是Google中第一个弹出的问题。有时,由ab报告的长度错误可能是由一个真正的问题引起的:如果在客户端未收到Content-Length标头中声明的字节总数之前,服务器端已关闭连接。如果客户端和服务器之间存在其他参与方,例如天真的手工负载平衡器(我的情况),则可能发生这种情况。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.