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

时间:2009-02-23 21:32:25

标签: benchmarking load-testing apachebench

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

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

这会打开50个保持活动连接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报告说有一半的连接失败了? “长度:”在这种情况下意味着什么?

由于

3 个答案:

答案 0 :(得分:345)

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

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

答案 1 :(得分:118)

换句话说:

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

以下apache错误报告似乎证实:ASF Bug 42040

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

编辑:我最近注意到ab命令有一个新选项(至少对我而言):

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

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

答案 2 :(得分:7)

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