1

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

打电话时,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

考虑到该站点正在生产中,因此除了我的请求之外还有其他请求,我无法解释为什么没有并发的调用比即使是小并发的调用要快得多。

有什么建议么?

4

1 回答 1

1

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

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

作为一般说明,负载测试的更好方法是确定您的应用程序需要能够支持的流量级别,然后设计一个测试来生成此级别的吞吐量,仅此而已。像 AB 一样尽可能快地运行线程往往会使任何类型的受控测试变得困难。JMeter 更好。

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

于 2012-06-06T15:40:25.040 回答