ApacheBench中有和没有并发请求的结果不同

时间:2012-06-06 14:55:26

标签: performance performance-testing apachebench

我正在尝试获取有关生产服务器响应时间的一些统计信息。

致电ab -n100 -c1 "http://example.com/search?q=something"时,我得到以下结果:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       24   25   0.7     24      29
Processing:   526  874 116.1    868    1263
Waiting:      313  608 105.1    596    1032
Total:        552  898 116.1    892    1288

但是当我致电ab -n100 -c3 "http://example.com/search?q=something"时,结果会更糟糕:

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       24   25   0.8     25      30
Processing:   898 1872 1065.6   1689    8114
Waiting:      654 1410 765.5   1299    7821
Total:        923 1897 1065.5   1714    8138

考虑到该网站正在生产中,因此除了我的网站之外还有其他请求,我无法解释为什么没有并发性的调用比甚至小并发更快。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果你的并发性为1意味着你要告诉AB使用一个线程尽可能快地点击这个URL。值-c3告诉AB执行相同的操作,但使用3个线程,这可能会导致更大量的调用,在您的情况下,这似乎导致事情变慢。 (注意AB是单线程的,因此实际上并不使用多个os线程,但类比仍然适用。)

这有点像在收费站有更多的车道,一条车道只能处理车速如此之快,但有三条车道你将获得更多的吞吐量。但无论你有多少车道你都有隧道的宽度,在收费站也会影响吞吐量之后车辆必须通过,这可能就是你所看到的。

总的来说,更好的负载测试方法是确定您的应用需要能够支持的流量级别,然后设计一个能够产生此级别吞吐量的测试,而不再需要。像AB一样快速运行线程往往会使任何类型的受控测试变得困难。 JMeter更好。

另外,您可能想考虑为他的类型设置一个测试服务器,风险较低......