免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5993 | 回复: 5
打印 上一主题 下一主题

服务器压力测试的疑惑(涉及web服务,但不仅仅涉及web服务) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-12 19:12 |只看该作者 |倒序浏览
服务器压力测试测出的最大承载数是应用服务器一项非常重要的性能指标。但是,看过的一些项目,Web应用服务器(http、web services等)和非web应用服务器(游戏服务器、更新服务器等)之间的最大承载数/最大连接数的差异往往相当之大。同时,对同一个Web服务器的不同测算方法,给出来的数值也有天壤之别。

所以,在此,我想了解一下,大家对服务器连接数的计算是怎样进行的。在此,我先将我所了解到,和认知的情况大致说明一下,看看有没有什么地方大家认为不妥的。

1. 应用服务器的最大承载数/连接数,需要同时标注:
a. 主要硬件配置(机型、CPU、内存,网卡)
b. 操作系统
c. 正常工作时非被测试应用服务器的负载(比如同时还运行着其他耗资源的程序,比如下载服务等)
d. 连接类型。常连接还是短连接。被测试的时间片段内,是否所给出数值的所有连接均在工作,没有一个断开?
如果以上任何一项没有给出,则该压力测试数据没有意义。

对以上几点分别举例说明:
a. 同一个应用服务器程序,在一个单核赛扬,512MB内存的机器上,测试出来的最大连接数,一般而言,均要比在双志强双核,4GB的机器上跑出来的要小很多。毕竟有一些应用类型起每一个连接将要消耗大量的硬件资源。
至于网卡,这是我实际遇到的一个问题:在一次做压力测试的时候,CPU占用率和内存均还有较大的消耗空间,但压力已经不上去。再一看,网卡的吞吐量已经100%了。
b. 不同操作系统对应用服务器必要细节的实现不同,比如高性能网络I/O操作的能力之于echo服务器。所以拿A应用服务器的Linux版的数据和B应用服务器的Windows版的数据比较,一般只有参考意义。如果连操作系统都没有注明,找什么作参考?
c. 对于耗费内存的应用服务器来说,如果有另外一个耗费内存的程序在运行,势必将带来更多更频繁的内外存数据交换,从而极大地降低数据操作性能。
d. Web服务器(http、web services)大多均为短连接,而文件更新等服务多为长连接。虽然名义上最大连接数应该是同时存在的,服务中的,未关闭的最大稳定连接数,但是好像有的数据不是按照这个概念出来的。
举个简单的例子:
在一个低配置的机器上,有一个提供短连接的应用服务器。其最大能同时服务的连接数只有200,每次连接仅持续0.1秒。按理说,这个应用服务器在这种情况下的最大连接数仅为200,但我却真见过有人这样计算的:2,000,因为1秒钟内服务了(或者能服务)2,000个连接120,000,因为1分钟内服务了(或者能服务)120,000个连接

2. 关于UDP服务器的压力测试:
由于UDP非面向连接,且丢包和重复发送的不确定性,怎样来定义和计算UDP服务器的最大服务数呢?
我想,按照之前对于TCP的方式,如果从收到请求报,到发送应答报完成,算是一次服务过程的话,那:
a. 怎样确认客户已收到发送的应答呢?如果发送的该应答包丢了,算是服务了这个客户没有?从服务器的角度来说,服务器干活了;但从客户的角度来说,没有收到任何处理输出。
b. 如果我收到了重复的请求报,且因为无法分辨是否是同一客户同一次请求的重复报(比如echo服务器)而处理了多次的话,这算服务了几个客户?

期待大家能交流一下看法。

论坛徽章:
0
2 [报告]
发表于 2009-05-12 20:09 |只看该作者
楼主说得挺有理的
这个的确有很多考虑的,最好是拿相同的代码,相同的测试数据,测试相同时间来比较差异

论坛徽章:
0
3 [报告]
发表于 2009-05-13 11:03 |只看该作者
那么怎么做压力测试会好些呢?

论坛徽章:
0
4 [报告]
发表于 2009-05-13 18:20 |只看该作者

回复 #3 guhan010 的帖子

我现在用的方法也不是太好,因为有可能会大幅拉下服务器的并发性能,所以只适用于长连接。

我用的方法是,使用一个单件(或全局唯一,多线程安全的计数器),accept一个连接成功,并通过调度分配到线程开始正式服务后,调用该计数器连接数加1。之后因为任何事情断开(意外的非意外的,可以在清理/回收/析构函数等地方处理),调用该计数器将连接数减1。加减的调用必须确保没有任何遗漏,这样才能得出可靠的数值。

测试时,只要所有已经连上的连接不主动断开,那当加载到服务器端的计数不能再上涨时,便是该情况下(前面说的a、b、c三项)的最大连接数。
这个方法的有三个问题:
1. 只能用于在得出最大连接数之前不再退出,或者暂停/停止服务的长联接;
2. 因为在连接和断开时,会有强制的串行化操作(调用计数器),所以无论是客户端接入的高峰时,还是断开的高峰时,都会有部分新的客户端无法连接服务器成功。所以即使当客户端的有连接失败的计数出现,只要服务器端的最大连接计数还在上涨,那就还没达到服务器所能承载的最大连接数。
3. 多进程服务器如果改用多进程安全的计数器的话,调用计数器时串行化操作带来的影响将会更大。

不知道大家有没有什么好的主意或者看法?

论坛徽章:
0
5 [报告]
发表于 2009-05-19 12:44 |只看该作者
mark

论坛徽章:
0
6 [报告]
发表于 2009-07-21 03:55 |只看该作者
对游戏服务器有兴趣,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP