2009-09-13 63 views
16

我想弄清楚如何使用ApacheBench和基准我的网站。我安装了默认的站点项目(它是ASP.NET MVC,但如果你不是.NET的人,请不要停下来阅读)。有人能解释一下这些ApacheBench结果的含义吗?

我没有改变任何东西。添加新项目。将配置设置为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次/秒的要求,那么这是说它处理和每秒421平均需求?

其次,添加更多并发的原因是什么?如果,如果我在1个并发上有1000次点击,那么2个并发上的500个不同?是否要测试是否有阻止其他请求的代码?

最后,有什么重要的,我从结果中错过了,我应该注意到?

谢谢:)

回答

16

什么是增加更多的 并发的原因吗?如在,如果我有1000个点击 在1并发,如何不同 到500并发2?如果有任何代码阻止其他 请求,是否要测试 ?

这是一个有点,是的:你的应用程序可能会做并发可能带来麻烦的事情。

几个例子:

  • 页面试图访问一个文件 - 在这个过程中锁定它;这意味着如果另一个页面必须访问同一个文件,它必须等到第一个页面处理完毕。
  • 完全一样的数据库访问:如果一个页面被写入到数据库中,有某种锁定mecanisms的(无论是基于表格或基于行的,或什么的,这取决于你的DBMS)

测试并发性是好的......只要你的网站永远不会有多个用户在同一时间;这是相当不现实的,我希望为你。


你必须考虑有多少用户会在现场同时进行生产 - 并调整并发性;只记得,5个用户在同一时间在您的网站并不意味着你必须用5 AB并发测试:

  • 真正的用户会等待每个请求之间的几秒钟(时间阅读页面,点击一个链接,...)
  • ab不会等待:每次页面加载(即一个请求完成),它会启动另一个请求!


此外,其他两件事情:

  • AB只测试一个网页 - 真正的用户会浏览整个网站,这可能会导致并发问题,你就不会在测试只有一个页面
  • ab只加载一个页面:它不请求外部资源(认为CSS,图像,JS,...);这意味着当您的网站投入生产时,即使不是真的很贵,也会有很多其他请求。

一点题外话:当你想,如果事情你做了测量AB是非常好的:你可能想看看其他的工具,它可以做更完整的测试,像siegeJmeter,或OpenSTA是否优化您的网页;但如果你想模拟你的网站的“真实”使用情况,这些更适合。

8

是的,如果您想知道您的网站每秒可以提供多少请求,请查看“每秒请求数”行。 在你的情况下,它真的很简单,因为你运行的并发性为1.每个请求平均只需2.371ms。这些人中的421人一个接一个地消耗1秒。

你真的应该玩并发一点点,以准确衡量你的网站的容量。 由于多个请求由IIS并行处理,因此预计吞吐量会增加一定程度的并发性。 例如如果你的服务器有多个CPU /内核。另外,如果页面依赖于外部IO(中间层服务或DB调用),则CPU可以在一个请求上工作,而另一个则在等待IO完成。 在某个点上,请求/秒将平稳,并发性增加,并且您将看到延迟增加。因为服务器必须投入更多资源来处理所有这些并发请求,所以您的吞吐量(req/sec)会降低,从而进一步提高并发性。

所有这一切说,大部分请求返回大约2ms。这非常快,所以我猜测在数据库或中间层调用方面没有多少进展,并且在测试运行时系统可能在cpu上最大化(或者出现问题,并且速度很快。你确定ab得到你想要的响应页面,即你认为你正在测试的页面大小是1204字节?)。 这引出了另外一点:ab本身也会消耗CPU,特别是一旦你达到了并发性。所以你想在另一台机器上运行ab。

此外,应你的网站做外部调用中间层服务或数据块,你要调整你的machine.config优化线程数IIS分配:http://support.microsoft.com/default.aspx?scid=kb;en-us;821268

和一点点琐事:所用的时间统计信息以〜16ms的增量进行,因为这似乎是所用定时器的粒度。即80%的回复不需要0ms,他们花了一些时间< 16ms。

+0

干杯队友:)我没有数据库或中间层服务。它只是默认的标准ASP.NET MVC项目。我只是试图让我的头了解ApacheBench的工作方式,以及我如何使用它来进行一些真正的bencharking等:) – 2009-09-14 01:58:24

相关问题