我正在试图弄清楚如何使用ApacheBench并对我的网站进行基准测试。我安装了默认的站点项目(它是ASP.NET MVC,但如果你不是.NET人员,请不要停止阅读。)
我没有改变任何事情。添加新项目。将confuration设置为RELEASE。运行没有调试。 (所以它处于LIVE模式)。是的,这是内置的网络服务器,而不是生产级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 reqs / sec,那么这就是说它处理平均每秒421 req?
其次,添加更多并发的原因是什么?就像在,如果我在1个并发上有1000次点击,那么两个并发的500有什么不同?是否要测试是否存在阻止其他请求的代码?
最后,我应该注意到的结果中是否有任何重要的错误?
谢谢:)
答案 0 :(得分:17)
添加更多内容的原因是什么 同时?如果我有1000次点击 1并发,这有什么不同 到2并发500?是测试 如果有任何代码阻止其他代码 请求?
关于这一点,是的:您的应用程序可能正在做并发可能带来麻烦的事情。
几个例子:
使用一个并发测试是可以的...只要您的网站永远不会同时拥有多个用户;这对我来说非常不现实。
您必须考虑有多少用户同时在现场,在生产时 - 并调整并发性;请记住,您网站上同时有5个用户并不意味着您必须使用ab进行5次并发测试:
另外还有两件事:
作为旁注:你可能想看看其他工具,这些工具可以做更完整的测试,比如siege,Jmeter或OpenSTA:ab非常好当你想测量你所做的事情是否正在优化你的页面;但是如果你想模拟你网站的“真实”用途,那就更适合了。
答案 1 :(得分:8)
是的,如果您想知道您的网站每秒可以投放多少请求,请查看“每秒请求数”行。 在你的情况下,它非常简单,因为你运行ab并发为1.每个请求,平均只需要2.371ms。其中421个,一个接一个,需要1秒钟。
你真的应该稍微使用并发性,以准确衡量你的网站的容量。 由于IIS会并行处理多个请求,因此您可以预期吞吐量会增加到一定程度的并发性。 例如。如果您的服务器有多个CPU /核心。此外,如果页面依赖于外部IO(中间层服务或DB调用),则cpu可以在一个请求上工作,而另一个则在等待IO完成。 在某个时刻,请求/秒将趋于平稳,随着并发性的增加,您将看到延迟增加。进一步增加并发性,您将看到您的吞吐量(req / sec)减少,因为服务器必须投入更多资源来处理所有这些并发请求。
所有这一切,你的大部分请求都在大约2ms内返回。这是非常快的,所以我猜测在DB或中间层调用方面没有太多进展,并且当测试运行时你的系统可能在cpu上最大化(或者出了问题,并且真的很快失败。你确定ab得到你想要的响应页面吗?即你认为你正在测试1204字节大的页面?)。 这带来了另一个观点:ab本身也会消耗cpu,尤其是一旦你实现了并发性。所以你想在另一台机器上运行ab。
此外,如果您的站点对中间层服务或数据库进行外部调用,您需要调整machine.config以优化IIS分配的线程数:http://support.microsoft.com/default.aspx?scid=kb;en-us;821268
只是一点点琐事:统计时间以~16ms为增量进行,因为这似乎是所用计时器的粒度。即80%的回复没有花费0毫秒,他们花了一些时间<16毫秒。