- [root@logserver etc]# uname -a
- Linux logserver 2.6.9-78.ELsmp #1 SMP Thu Jul 24 23:54:48 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux
- [root@logserver etc]# cat /etc/redhat-release
- CentOS release 4.7 (Final)
复制代码测试工具是 apache 的 ab ,用来模拟,大量的并发连接,本来是在另一台虚拟机中模拟客户端,但随着压力的上升,还没压死 nginx 就先将自己压死了 -_- ,最后只能自己压自己了。
测试脚本大概如下:
-
- ab -n 100000 -c >client_number< [-k] http://***********/cms/index.html
复制代码index.html 的大小是:123784 byte
我将测试数据整理到Excel中,猛击这里下载,如下: [attach]103096[/attach]
nginx 短连接测试结果(1/20抽样展示)
[attach]103097[/attach]
nginx 长连接测试结果(1/20抽样展示)
单看数字可能比较枯燥,还是看图吧:
[attach]103098[/attach]
[attach]103099[/attach]
针对第一组图片,有几个地方需要解析一下的。
“Concurrency Level”并不对应有多少个浏览器或者多少个用户,应该理解为并发连接数,通常IE访问一个网页,打开3~10个连接,正常情况下,10000个“客户端数”可以非常粗略地认为1000~3000个用户吧。
长连接的典型代表是 HTTP 1.1 ,而短连接的典型代表是 HTTP 1.0,支持HTTP 1.1的浏览器早就遍地都是了,为什么还要测试短连接呢?第一,这是因为实际的浏览中,一个“长”连接不可能像ab测试中的“长”连接这么长,所以短链接的测试成绩作为一个“底线”;第二,某些扫描工具用的就是短链接的方式,既然要做互联网的应用,也要“照顾”它们啊。因此,在生产环境中,真实的成绩会在红线和蓝线之间的区间,具体是怎么样呢,“这个就不能说太细了”。
关于“传输率”这幅图的纵坐标的意义,100000 相当于 100MB/sec,也就是常说的百兆网络(忽略 CSMA/CD 造成的损失),而常说的千兆网络,经过测试,大概在400000~500000之间,换句话来说,如果nginx服务器的出口带宽是百兆网络的话,瓶颈在网络而不是nginx。
[attach]103100[/attach]
[attach]103104[/attach]
针对第二组图片也是有几个地方需要解析一下的:
生产环境的成绩应该是在蓝线和红线之间的区间,这个就不用再解析了吧。
“Logest Response Time” 实际上取的是能完成所有请求中的99%时的时间,这样可以屏蔽一些误差。
随着压力的增加,响应时间的飙升是可以预见的,但是多少才算是一个可接受范围呢?在2009系统架构师大会腾讯的邱跃鹏在《海量SNS网站的柔性运营》中的发言提到的“用户速度体验的1-3-10原则”:
[attach]103101[/attach]
可以简单的认为:如果以3秒的响应时间作为标准的话,nginx能应付不超过10000的并发连接数,如果以10秒响应时间作为标准的话,nginx能应付15000以下个并发连接,当然,可能场合不同,您的用户连0.3秒都无法忍受,这个就要另说咯。
如果我假设,只要服务器不出现“连接重置”,“服务器无响应”等错误,只要能返回内容,我就愿意等,那么nginx能应付多大的并发连接数呢?我自己做了个测试,20000+20000个长连接,20000个短链接,同时压向nginx,结果如何呢?
[attach]103102[/attach]
[attach]103103[/attach]
nginx还是顶住了,没挂。我曾试过再加大压力,但是始终跑不完测试,结果作罢。
我的Apache使用worker模式,配置如下:
- <ifmodule worker.c>
- ServerLimit 1000
- ThreadLimit 11000
- StartServers 40
- MaxClients 30000
- MinSpareThreads 1000
- MaxSpareThreads 1000
- ThreadsPerChild 300
- MaxRequestsPerChild 0
- </ifmodule>
复制代码[attach]103105[/attach]
Apache 短连接成绩(1/10抽样展示)
[attach]103106[/attach]
Apache 短连接成绩(1/10抽样展示)
[attach]103107[/attach]
[attach]103108[/attach]
[attach]103109[/attach]
[attach]103110[/attach]
Apache 的结果图形和nginx类似,但是大家请留意横坐标,最大是10000,而nginx最大的是20000,这是由于测到10000的时候,再往上加压力Apache就受不了,不是SWAP用尽就是连接超时。
我把nginx和Apache的图标拼在一起,方便对比:
[attach]103111[/attach]