【问题标题】:Load Testing with AB ... fake failed requests (length)使用 AB 进行负载测试...假失败请求(长度)
【发布时间】:2010-10-09 10:20:03
【问题描述】:

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

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 个“失败”请求。我想不通。

在运行测试时,我能够从我的家用计算机完美地访问我的网站,尽管页面底部的页面加载时间报告为 0.5 而不是通常的 0.02。但是我从来没有遇到过失败的请求。

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

【问题讨论】:

  • 您的网站有负载均衡器吗?请参阅我在 load testing with load balancers 上的博客文章,这可能解释了负载测试中“它对我有用”的情况。

标签: benchmarking load-testing apachebench


【解决方案1】:

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

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

【讨论】:

  • 嘿,我刚刚遇到了同样的“问题”,很高兴这个答案就在这里。谢谢!
  • 感谢您的回答,我也有同样的疑问。
  • 是的,两年后这个答案仍然非常有用。
  • 不要太快将此归因于可变内容长度不匹配。 ab 不会在其摘要中将 HTTP 状态代码 500 报告为错误。长度不匹配的原因可能是你有一个真正的错误。您可以使用 -v 4 获取更多信息(更好的管道到文件,因为会有很多打印输出)。
  • 其实这里的ab手册里有说明httpd.apache.org/docs/current/programs/ab.html“如果测试过程中文档长度发生变化,则响应被认为是错误。”
【解决方案2】:

换句话来描述问题:

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

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

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

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

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

我可以在 ab 2.3 版 中看到它,但在 ab 2.3 版 中看不到它,所以它可能是最近才添加的。

【讨论】:

  • 对于 Mac 上的任何人来说,您的 ab 版本很可能落后并且 -l 不会接受。您可以从源代码或通过自制软件安装,但“brew install ab”不起作用,因为它是 apache 软件包的一部分 - 您可以使用“brew install homebrew/apache/ab”安装。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 2012-09-25
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多