在负载均衡的Tornado网站上使用Apache基准测试时出现失败请求,但没有记录任何请求。

3
也许这是一个关于ab的问题,而不是关于Tornado的,但有些事情不太合理。
我是这样运行基准测试的:
$ ab -n 100 http://localdomainname/ # 2 tornados being 1 nginx
 ...
Concurrency Level:      1
Time taken for tests:   0.162 seconds
Complete requests:      100
Failed requests:        17
   (Connect: 0, Receive: 0, Length: 17, Exceptions: 0)
Write errors:           0

根据这个数据,100个请求中有17个失败了。

在运行基准测试之前,我重置了日志文件并再次查看了它们:

$ wc -l /tmp/gkc.access.log 
100 /tmp/gkc.access.log
$ cat /tmp/gkc.access.log | grep ' 200 ' | wc -l
100

根据Nginx的记录,没有请求失败!为什么ab却显示100个请求中有17个失败了?

(顺便说一下,17个失败只是一个例子。它会上下波动,但从未达到0,这是我所期望的)

更新

在不影响Tornado+Nginx设置的情况下,使用httperf测试后,没有失败的请求。


在我弄清楚之前,我会使用httperf。 - Peter Bengtsson
尝试在一个简单的应用程序中测试,但无法复现 - 奇怪的是,当我达到文件描述符限制时,使用httperf会出现连接重置错误。 - Cole Maclean
我可以用Tornado的“Hello world”示例重现问题(使用ab,没有nginx或其他前端,10000个请求中有412个失败)。 - jholster
1个回答

14
您收到了“长度失败”的请求,这并不意味着响应代码不是200。它只是表示跨请求的响应长度不同(它记住了第一个请求的长度)。
详细地讲,这个问题已经在这个问题中讨论过:Load Testing with AB ... fake failed requests (length)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接