我正在尝试弄清楚如何使用ApacheBench并对我的网站进行基准测试。我安装了默认的站点项目(它是ASP.NET MVC,但如果你不是.NET用户,请不要停止阅读)。
我什么都没改变。添加新项目。将confuration设置为RELEASE。运行时不使用Debug。(所以它处于实时模式)。是的,这是内置的Yes服务器,而不是生产级的IIS或Apache或其他什么。
因此,结果如下:
C:\Temp>ab -n 1000 -c 1 http://localhost:50035/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: ASP.NET
Server Hostname: localhost
Server Port: 50035
Document Path: /
Document Length: 1204 bytes
Concurrency Level: 1
Time taken for tests: 2.371 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 1504000 bytes
HTML transferred: 1204000 bytes
Requests per second: 421.73 [#/sec] (mean)
Time per request: 2.371 [ms] (mean)
Time per request: 2.371 [ms] (mean, across all concurrent requests)
Transfer rate: 619.41 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.1 0 16
Processing: 0 2 5.5 0 16
Waiting: 0 2 5.1 0 16
Total: 0 2 5.6 0 16
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 16
95% 16
98% 16
99% 16
100% 16 (longest request)
C:\Temp>
现在,我不确定我应该看什么。
首先,我后一秒的请求数。因此,如果我们要求每秒处理300个请求,那么这是不是说它平均每秒处理421个请求?
其次,添加更多并发的原因是什么?例如,如果我在1个并发上有1000个命中,那么在2个并发上有500个有什么不同?它是为了测试是否有阻止其他请求的代码?
最后,从结果中我遗漏了什么重要的东西,我应该注意的?
谢谢:)
发布于 2009-09-13 23:04:59
是的,如果你想知道你的站点每秒能处理多少请求,看看“每秒请求数”行。在你的例子中,这真的很简单,因为你运行ab的并发为1,每个请求平均只需要2.371毫秒。其中421个,一个接一个,花了1秒。
你真的应该尝试一下并发性,以准确地衡量你的站点的容量。当IIS并行处理多个请求时,当达到一定程度的并发时,您可以预期吞吐量会增加。例如,如果您的服务器有多个CPU/核心。此外,如果页面依赖于外部IO (中间层服务或DB调用),则cpu可以处理一个请求,而另一个请求则在等待IO完成。在某一时刻,请求/秒将随着并发性的增加而趋于平稳,并且您将看到延迟的增加。进一步增加并发性,您将看到吞吐量(req/sec)下降,因为服务器必须投入更多的资源来处理所有这些并发请求。
总而言之,你的大多数请求都会在大约2毫秒内返回。这是相当快的,所以我猜在数据库或中间层调用方面没有发生太多事情,当测试运行时,您的系统可能在cpu上耗尽了(或者有什么问题,并且失败得非常快。你确定ab会得到你想要的响应页面吗?例如,你认为你正在测试的页面有1204个字节大吗?)这就引出了另一点: ab本身也会消耗cpu,特别是当你增加并发的时候。所以你想在另一台机器上运行ab。
此外,如果您的站点向中间层服务或DB发出外部调用,则需要调整machine.config以优化IIS分配的线程数:http://support.microsoft.com/default.aspx?scid=kb;en-us;821268
还有一点小问题:所用时间的统计是以大约16ms为增量的,因为这似乎是所使用的计时器的粒度。也就是说,80%的回复没有花费0ms,他们花费了一些时间<16ms。
https://stackoverflow.com/questions/1417727
复制相似问题