我正在尝试获取有关生产服务器响应时间的一些统计信息。
致电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
考虑到该网站正在生产中,因此除了我的网站之外还有其他请求,我无法解释为什么没有并发性的调用比甚至小并发更快。
有什么建议吗?
答案 0 :(得分:1)
如果你的并发性为1意味着你要告诉AB使用一个线程尽可能快地点击这个URL。值-c3告诉AB执行相同的操作,但使用3个线程,这可能会导致更大量的调用,在您的情况下,这似乎导致事情变慢。 (注意AB是单线程的,因此实际上并不使用多个os线程,但类比仍然适用。)
这有点像在收费站有更多的车道,一条车道只能处理车速如此之快,但有三条车道你将获得更多的吞吐量。但无论你有多少车道你都有隧道的宽度,在收费站也会影响吞吐量之后车辆必须通过,这可能就是你所看到的。
总的来说,更好的负载测试方法是确定您的应用需要能够支持的流量级别,然后设计一个能够产生此级别吞吐量的测试,而不再需要。像AB一样快速运行线程往往会使任何类型的受控测试变得困难。 JMeter更好。
另外,您可能想考虑为他的类型设置一个测试服务器,风险较低......