51Testing软件测试论坛

标题: 服务器集群负载/性能/压力测试 [打印本页]

作者: Aimbot    时间: 2010-7-2 10:18
标题: 服务器集群负载/性能/压力测试
最近半年都在搞这个,有高手分享下这方面的经验么?

整个流程可以被这样描述:用户 -> 客户端 -> 登录服务器 -> 用户 -> 在线服务应用 -> 数据库/Memory CacheD -> 在线服务应用 -> 客户端 ->用户
在线服务应用里提供了200个左右的API,每个API的调用可能会查询数据库1-5次。


架构0:无负载均衡无拓展
1台验证/登录 (Manager)
1台在线服务应用 (Application)
1台数据库 (DB)
1台Memory CacheD

之后在此基础上针对在线服务应用和数据库进行拓展并实现负载均衡:
Application:
软件拓展:从1个进程拓展至16个进程(服务器支持超线程可以当成16个core来用)
硬件拓展:从1台拓展至3台
负载平衡:在Manager实现Application的地址+端口轮询

DB:
数据库集群:在2台物理服务器上部署虚拟机分别安装LVS,SQL Node和Data Node
负载平衡:前置DNS轮询2个LVS

=====================
要求如下:
给出模拟X万人在线对服务器造成的负载的测试策略
给出负载/性能/带宽的测试策略

[ 本帖最后由 Aimbot 于 2010-7-2 11:21 编辑 ]
作者: cncnily    时间: 2010-7-2 10:40
你要问什么?
作者: Aimbot    时间: 2010-7-2 10:55
我不是写在帖子里了么?
x万人同时在线对服务器造成的负载模拟
测试报告里要包含哪些方面的数据和分析
作者: cncnily    时间: 2010-7-2 11:06
你写的是给出报告 我的天呐。。。
原来公司搞这个 不过没多久就走了
现在在开发公司不涉及这个,你都搞半年了还对我这么凶,我怕被喷
作者: Indisorder    时间: 2010-7-2 14:11
没有做过 求教...
作者: 星空物语    时间: 2010-7-2 21:57
我看到过的报告大概包含这些,可能不专业哈
各时间段各服务器的内存、CPU使用率
人数多少的时候服务器正常、达到饱和、崩掉
服务器在何阶段时客户端表现为卡机、延迟,程度有多大
包括地图的压力(比如客户端很卡是因为大量人物在出生点,随着级别升高,分流后慢慢好转)
不同时段带宽的使用率,数据包是否正常

[ 本帖最后由 星空物语 于 2010-7-2 21:58 编辑 ]
作者: Indisorder    时间: 2010-7-4 03:51
这么怎么感觉是在运营之前做一次 然后运营后继续做并且每过一段时间就要提交的东西呢?否则也不会测一年的吧?
作者: Aimbot    时间: 2010-7-4 19:13
楼上看的是游戏运营方面的报告吧?对我没什么帮助不过还是谢谢分享。
作者: 星空物语    时间: 2010-7-4 20:21
你是搞哪方面的?
作者: Aimbot    时间: 2010-7-4 20:27
啊?测试啊。。。。不过不是运营公司搞测试的
作者: Indisorder    时间: 2010-7-4 20:54
很好很强大,刀片服务器矩阵组...
作者: Aimbot    时间: 2010-7-4 21:12
擦,哪有那么多预算用ibm的服务器做测试啊。服务器品牌是dell的,双Xeon,32G内存惨兮兮的过日子,2台i7拿来做测试分析的机器只好可怜巴巴的用部门预算买。
当然比开发环境要强很多,据传有个standalone的开发环境配的是p4.。。

坛子里的高手呢? 云层老师现身说法下?
作者: 星空物语    时间: 2010-7-5 22:37
如果是游戏的话即使开发也是要以运营为最终目的的吧
作者: Aimbot    时间: 2010-7-6 10:15
原帖由 Indisorder 于 2010-7-4 03:51 发表
这么怎么感觉是在运营之前做一次 然后运营后继续做并且每过一段时间就要提交的东西呢?否则也不会测一年的吧?

原帖由 星空物语 于 2010-7-5 22:37 发表
如果是游戏的话即使开发也是要以运营为最终目的的吧


看看我帖子的问题吧,跟运营没关系的。运营用的东西1天就能搞定:每x分钟查一次数据库看看有多少人在线,带宽这种不至于复杂到要搞半年还没搞定吧。
作者: lwj345    时间: 2010-7-12 17:49
个人觉得了解策略,首先要了解该系统的预期是多少,按照行业经验算出万人在线时大概相当于多少的并发量,在这个并发的情况下,查看交易的响应时间是否满足你的预期,查看交易的成功率是否正常,会不会出现大压力情况下大面积出错的情况.
1.从你的意思来看,应该是调用api来发起对应的交易,接口的话一般处理速度会比较快,建议响应时间应该低于1秒.
2.这里面交易很多,有200多个api,可以找交易最复杂的(比如调用5次数据库的或者查询库数据相当大的)以及最常用的场景交易.
3.可以考虑系统使用的极限来判断负载均衡,首先在单台的情况下,测试系统的硬件情况,CPU IO 内存等,一般是CPU最先达到瓶颈,记录下这时候并发的大概值.线程增加到2(可以理解为服务数从1个变成2个么),用同样的并发查看软件方面会不会自身会消耗较多资源;再增加硬件方面,同样压力,看负载是否能均衡分配到2台,以此递增.
4.带宽方面建议不多,可以查看交换机和压力机的情况,判断瓶颈在何处,比如交换机由百兆换千兆时,性能有没有明显提高.还有单台压力机大并发情况自己的网卡也会造成瓶颈,建议注意.

具体情况不是很了解!!就写这么多!!
作者: Aimbot    时间: 2010-7-14 18:51





B. 附件中的第二张图是在100毫秒精度下的测试结果。


C. 附件中的第三张图是对图二的统计学分析


========================================================================
回到我们想要讨论的问题:
1. 并发量的精度控制:用X次/秒还是X次/10秒或是X次/每分钟抑或是X次/百毫秒或者更精确?
2. 系统性能模型:什么情况下可以被认为是过载了?
========================================================================

1. 并发量的精度控制:
A. 显而易见的,我们的数据库集群的处理速度是微秒级的(1秒等于1百万微秒)。
B. 连接池技术的应用提升了数据库性能的弹性同时也使得测试更加富有挑战性。试想一下,假设并发请求数(假设100)控制的精度为1s,可能会造成在0-100毫秒里并发了80个,还有20个是分布在最后900毫秒内完成的,结果造成在某时刻数据库的连接数变大,导致平均响应时间过长,结果在一个10秒持续并发的情况下引发了雪崩效应。。。

-> 追加的问题3:同学们在测试的时候使用的时间精度是多少?

2. 系统性能模型:
A. 对系统过载的判断:我们是不是可以理解在给定的并发数前提下,如果响应时间逞线性的增长就可以被判断成系统过载?并以此尝试找到一个响应时间几乎不变的最大并发数作为系统过载的边界值?
B. 还是系统过载的判断:假设每秒并发数为100,持续并发20秒。如果前5秒内的500个请求在第6至10秒返回。是否可以据此认为系统未过载,并以此找到一个最大并发数作为系统过载的边界值?

->追加的问题4: 同学们你们倾向于第一种说法还是第二种说法还是有其他的方法?

[ 本帖最后由 Aimbot 于 2010-7-15 12:31 编辑 ]
作者: Aimbot    时间: 2010-7-14 22:44
来几个高手讨论下啊!!!!!!!
作者: planescape    时间: 2010-7-14 23:27
抛砖引玉--
1. 以1s为单位,原因如下:
1-1. 显然,测试工具的开发难度随着测试要求精度的提升呈指数级增长。
1-2. 测试数据的精度要求越高,其它非人为控制的因素对测试流程的影响也相应会被成倍放大,例如:在传输过程中发生的网络延迟等等。
1-3. 测试作为一门实验科学,更需要在可接受的误差范围内给出可接受精度的数据结果。
因此相较于无限度地提高测试精度并希望以此为依据来获得一个十分准确的结果,在准确度,易开发度和误差容忍度之间找到一个平衡点,然后尽可能多获取各种不同参数下的测试数据,通过统计学来逼近真实的结果会是一个更为可行的方法。

2. 我的意见是,综合考虑,判断系统过载的标准可以参考:
2-1. 业务平均响应时间过长
2-2. 业务处理失败率过高
2-3. 95%的响应时间分布高于可接受值
2-4. 负载数目的上升引起的系统性能下降速度过快
2-5. 系统事务处理队列的持续堆积(同你的2-A)
等等……
作者: cncnily    时间: 2010-7-15 09:40
先说明我没有专门研究过,我只是说说我的想法你看看对不对哦,如果说的不对别喷我哦
1:目前能测的是在多少精度时候服务器承受不住,但我们不可能知道具体真实的精度,所以第一个问题不可能有人知道,也没有更加准确的值。我们只能那服务器最大承受的数值去报告,如果压测时达不到标准只能换更好的设备。
2:我觉得开始执行的API对下一个执行的APi不能造成不合理的影响才算过载,如果超时但是完成的话不算过载。

[ 本帖最后由 cncnily 于 2010-7-15 09:42 编辑 ]
作者: Aimbot    时间: 2010-7-15 12:42
原帖由 planescape 于 2010-7-14 23:27 发表
抛砖引玉--
1. 以1s为单位,原因如下:
1-1. 显然,测试工具的开发难度随着测试要求精度的提升呈指数级增长。
1-2. 测试数据的精度要求越高,其它非人为控制的因素对测试流程的影响也相应会被成倍放大,例如:在传 ...


1-0. 如果并发数小且持续并发时间短的话,精度的差异就体现不出来。假设1s的并发为100,持续5秒和1秒并发1000,持续10秒由测试精度造成的差异就非常明显了。
1-1. 同意,丫是tnnd很难。
1-2. 局域网千兆交换机standalone的延迟是在微秒级的。但是我同意你的观点,是因为如果在一台物理机上启动x个虚拟客户的话,这台物理机cpu做进程调度就会影响测试精度。

追加问题5: 同学们一般都在一台物理机(请描述配置)上开多少个虚拟用户?一次测试总用会有多少虚拟用户参与并发?持续时间是多少?

2-all. 首先响应时间长,速度慢一般都是由于在线服务应用到数据库的连接池上线过大造成的。你可以做个实验,建立1000个到数据库的长连接,然后你调个select试试就知道了。其次,失败率可能最终归咎于在线服务应用自己写的不够坚挺造成的,特别是多线程。。。

追加问题6: 同学们测试的数据库应用(请描述大致的目的,比方说一个大型购物网站或是大型MMO游戏)连接池的上线一般都是多大?
作者: Aimbot    时间: 2010-7-15 12:51
原帖由 cncnily 于 2010-7-15 09:40 发表
先说明我没有专门研究过,我只是说说我的想法你看看对不对哦,如果说的不对别喷我哦
1:目前能测的是在多少精度时候服务器承受不住,但我们不可能知道具体真实的精度,所以第一个问题不可能有人知道,也没有更加 ...


1. 服务器扛不住不是因为累计未处理的请求(业务)的数量增加造成的。给你个例子:假设某数据库应用写了个2b的跨表查询逻辑(可能是某论坛提供的全文检索功能),但是又没有做index,所以当某xx个用户调用这个查询的时候,数据库服务器调用了大量内存来维护后续的查询队列的完整性,然后内存被撑满 ,接下来swap,最后挂了。

2. 没看懂你想说什么。

我这贴就不能加个精置个顶什么的,实习版主?!
作者: cncnily    时间: 2010-7-15 13:02
给你放到未解决区吧 再解决不了也没办法 我们也不是万能的
作者: crashing2010    时间: 2010-7-15 13:57
靠,人间惨剧啊啊啊啊啊

[ 本帖最后由 crashing2010 于 2010-7-15 13:58 编辑 ]
作者: planescape    时间: 2010-7-15 15:46
1-0. 所以这取决于你的测试对象的特性,假定我的测试对象,95%以上的事务发起频率都在1次/小时以下,那么对我来说测试工具在10秒范围内的误差完全可以接受。
1-2. 对于分布式测试来说,还有中央控制平台调度的精确性,以及所有测试平台的差异性。

2-all. sleep的线程除了内存之外好像也不会占用太多其他的服务器资源,求高手详解!
失败率就只能具体情况具体分析啦,但是至少可以确定的是,如果失败率太高,一定有什么地方出了错

只针对服务器吞吐量的话,当系统达到饱和点,服务器吞吐量保持稳定后,就达到了给定条件下的系统上限。随着服务器负载的继续增长,系统的响应时间也随之延长,虽然吞吐量保持稳定。
作者: Aimbot    时间: 2010-7-15 16:03
原帖由 planescape 于 2010-7-15 15:46 发表
1-0. 所以这取决于你的测试对象的特性,假定我的测试对象,95%以上的事务发起频率都在1次/小时以下,那么对我来说测试工具在10秒范围内的误差完全可以接受。
1-2. 对于分布式测试来说,还有中央控制平台调度的精确性 ...


Sleep的connection当然就跟没有一样,我说的当然是非sleep咯。
作者: Aimbot    时间: 2010-7-18 13:54
高手呢高手??!!

难道要去沙龙的时候当面问云层老师?
作者: cncnily    时间: 2010-7-18 15:02
云老师貌似也不精通这个吧
作者: Aimbot    时间: 2010-7-18 15:23
乱说,一样是测试服务器性能。云层老师是loadrunner的专家,怎么可能不精通这个啊?唯一的区别最多是工具不一样,我们用的工具是照着loadrunner做的“山寨”货(考虑到游戏客户端的网络引擎和商业软件在底层上区别很大),但原理和测试对象都是一样的。

召唤专家,召唤专家,难道这么多搞测试的都没认真做过这方面的测试么???!!!!   
作者: cncnily    时间: 2010-7-18 19:27
云层老师常来的,应该不会看不见吧,没准云老师最近忙啦
我的LR都是问云层老师的呵呵
我看见你报名上海的沙龙了,当面可以问问
作者: Indisorder    时间: 2010-7-24 04:14
我们老大说...龟儿子(原话),你们测试不就是高级玩家嘛,搞起这么高精尖干撒子,设计X子弹啊?
作者: Aimbot    时间: 2010-7-24 20:52
问了,虽然没有我期待的答案。但最起码在和云层老师和51testing的专业人士的互动里我确定了目前的测试方法和策略没有错。还是很羡慕测b/s的同学们那么多很好的测试工具能用,最起码不用在测试工具的测试设计开发调试花那么多时间精力。。。
作者: weiwei911909    时间: 2010-7-25 12:54
很高端的问题,虽然不是很理解,但是对这个问题有了大概的了解,增长了知识。谢谢前辈们的精彩讨论\(^o^)/~
作者: 5450488    时间: 2010-7-25 17:14
原来游戏服务器方面的负载压力测试这么复杂,我们公司有一款游戏快要上线了,boss让我们测试部门提供一份负载压力测试方案,现在还没点谱,看了一些资料一头雾水,纠结中~~
作者: 云层    时间: 2010-7-27 10:42
额原来那么早就有这个问题啊,一直没关注所以没看到,其实在沙龙上也提到了这个问题,不得不说几个关键点。

1.对于游戏来说扩展性的要求大于单机性能,在设计时必须要考虑到,否则就算测试出来不合格了也不能怎么样,这才是最大的悲剧
2.对于负载均衡的测试一般是通过递减模式来做的,你需要去规划或者计算整个系统的负载,这个算是容量测试的内容
3.大多数时候我们都无法得到真实的环境来进行测试,那么一般的策略都是使用低平台进行高平台的性能换算,或者使用标准系统的处理能力兑换来计算的

关于数据和结论不同的系统也不同,相关公司肯定也是严格保密的,那么只有靠你自己一边测试一边分析了
作者: cncnily    时间: 2010-7-27 10:49
信云层 得永生
作者: Aimbot    时间: 2010-7-30 12:36
8个月的努力,总算有点成果了。下午第一份正式的报告就能出了,哇哈哈哈哈哈哈。顺便鄙视楼上的。
作者: 云层    时间: 2010-9-1 19:26
额,绕了一圈发现还是这个帖子。。
作者: hr0210    时间: 2010-9-3 11:21
希望此贴能有明确的方案解说 以及结果~
作者: zhoward    时间: 2011-3-7 11:57
回复 35# 云层


   3.大多数时候我们都无法得到真实的环境来进行测试,那么一般的策略都是使用低平台进行高平台的性能换算,或者使用标准系统的处理能力兑换来计算的

测试环境跟实际环境确实有很大的不同,那么,请问云层老大,怎么通过平台1的结果来换算高平台的性能情况??????万分感激
作者: skyhigh1984    时间: 2012-2-18 16:58
得mark一下 马上就要搞服务器集群性能测试了 希望帖子能对自己有所启发




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2