如何规划性能测试拓扑

假设通过性能测试需求分析,我们需要创建一个性能测试场景,并发500个web虚拟用户,这时我们需要考虑:

1)选用什么样软硬件配置的的机器作为测试机?

2)500个并发用户需要多少台测试机才够用?

  在性能测试执行之前,一定要把上面的问题搞清楚,主要是为了避免将来性能测试执行时瓶颈出现在客户端,客户端承载了太多的压力,而没有真正的提交到服务器上去。这种情况下,我们会看到客户端CPU利用率居高不下,响应速度十分缓慢,甚至出现宕机的情形。

实际上,针对特定的性能测试需求,建立多大规模的性能测试机群才算合理,与多个因素有关,包括:测试机的软硬件配置、测试机的数量、脚本的复杂程度、网络的情况等。

客户端CPU估算

  还是以web虚拟用户为例,如果选择windows XP 1 CPU,1GB内存标准配置作为测试机,那么每50虚拟用户占用CPU约为2.2%。因此,在理想状态下,总共在本机可最大并发的虚拟用户为:

    Total Vusers=100/2.2*50=2272(个虚拟用户)

  结合实际情况考虑,操作系统本身,LR等后台进程的运行也要占用20%左右的CPU资源,再加上80%的瓶颈系数,实际情况下,在保证不出现CPU瓶颈的前提下,windows XP 1CPU 1GB内存标准配置的最大CPU瓶颈虚拟用户为:

Total Vusers=100/2.2*50*80%*80%=1454(个虚拟用户)

客户端网络瓶颈估算

  网络瓶颈是一个重要但又经常被忽视的瓶颈因素。在负载测试执行时,必然会引起大量的网络流量,那么在当前的网络情况下,能否顺利的运载这些数据到达服务器呢?这需要在性能测试开始之前,进行一个网络瓶颈评估。

  假设,当前的网络环境为100MB局域网,实际上100MB的计算单位为bit,转化成我们常用的Byte,应该是100/8=12.5M Byte。

  一般,网络的瓶颈安全系数为80%,那么实际上LR可用的瓶颈宽带为:

Available bandwidth = 12.5 * 80% =10M Bytes

  当前局域网内本机可并发的最大用户数为 LR可用宽带(10MB)/ 单个用户宽带(单个虚拟用户的占用宽带可以借助抓包工具分析)

客户端内存瓶颈估算

  在windows XP标准配置环境下,每50web虚拟用户以进程模式运行所需内存为4.6MB,以线程模式运行所需内存为0.82MB。因此,理想情况下,1GB内存进程运行最大并发为1000/4.6*50=10869,以线程模式最大并发为1000/0.82*50=60975。

  在实际情况下,还要考虑其他使用内存的因素,如操作系统和相关后台进程,虚拟内存触发条件,VU脚本本身应用创建buffer所需内存。

  由于LR运行在操作系统上,操作系统内存也随着压力的发起而增大,当内存增大到一定程度的时候,虚拟内存就会被创建,这时就会进一步提高CPU的占用率和IO吞吐量,实际上形成客户端的瓶颈。因此,做如下假设:

  1、LR运行时,操作系统占用内存25%。

  2、在物理内存使用率到达85%时,将会创建虚拟内存(可以查看windows和linux相关swap参数设置)。

  3、虚拟用户主要是处理和发送数据,一个脚本所使用的内存可以用它发送出去的网络数据大小来替代。

 总共虚拟用户可用内存 Total available Memory=1000*(100-25%)*85%=638MB

  每个虚拟用户占用内存 Vuser Memory=lr Vuser 执行内存+ Vuser脚本使用内存

  Vuser脚本使用内存可以使用网络流量来估算,比如抓包获取的流量为115KB,那么脚本为执行此操作,至少要在内存上开辟出115KB的数据buffer。

  因为,单个虚拟用户运行所需内存为:Vuser Memory=0.82+115=116KB

  而在1G内存下,能够支持最大瓶颈并发用户数为:

  Total Vusers=Total available Memory/Vuser Memory=638MB/116KB=5500个。

总评估

  通过以上计算,我们能清楚的看到,在windows XP 测试机标准配置下,

  1、CPU瓶颈最大虚拟用户并发数为1454

2、网路瓶颈最大虚拟用户并发数为416

  3、内存瓶颈最大虚拟用户并发数为5500

  根据瓶颈取短原则,实际上当前测试的瓶颈虚拟用户数为416个。

  同时,我们还可以从评估分析种得到以下结论:

  1、如果想做到500并发,应对当前网络环境进行升级。

  2、web脚本不宜过长,否则数据buffer迟迟得不到释放,会导致本虚拟用户的内存使用过高,可能引起本机内存瓶颈。

原文发布于微信公众号 - 软件测试经验与教训(udatest)

原文发表时间:2017-02-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏web前端教室

零基础如何建立“前端技术体系”? --本周日晚“先行者课程”,给你示范

昨天的《WEB前端新人,怎么样构建自己的“前端技术体系”?用以在面试中打败其它竞争者》大概的写了下新人如何建立属于自己的前端技术体系,比较简单,正好今晚的先行者...

2286
来自专栏IT技术精选文摘

什么是内存数据库以及它如何有效保存数据

你可能听说过内存数据库。如果没有,您可以从这里(https://en.wikipedia.org/wiki/In-memory_database)快速查看他们的...

2755
来自专栏北京马哥教育

三分钟看懂Nginx服务器的缓存原理和机制

作者:LifeIsButA_Span 来源: http://blog.csdn.net/lifeisbuta_span/article/details/7059...

4067
来自专栏Janti

spring boot之从零开始开发自己的网站

3502
来自专栏WeTest质量开放平台团队的专栏

HTTP/2之服务器推送(Server Push)最佳实践

商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。

4580
来自专栏技术点滴

git使用小结

git使用小结 很多人可能和我一样,起初对git是一无所知的。我也是因为一次偶然的机会接触到git,并被它强大的功能所蛰伏。git其实就是一种版本控制工具,就像...

2078
来自专栏walterlv - 吕毅的博客

VS 编译太慢了吗?新建解决方案配置关闭一部分项目的编译

2018-04-02 23:59

1921
来自专栏有趣的Python

最新Django2.0.1在线教育零基础到上线教程(十二)

演示地址: http://mxonline.mtianyan.cn 教程仓库地址1: https://github.com/mtianyan/DjangoGe...

3176
来自专栏开源项目

码云周刊:当测试拿起自动化测试工具,开发仿佛看见一场悲剧正在上演!

类型:自动化测试 虽然之前小一做过几年开发,但当时对于在公司兴起的自动化测试概念还不是很清楚,觉得是一种很神秘的东西,后来通过向业内资深的测试工程师朋友咨询才恍...

3859
来自专栏深度学习那些事儿

理解matplotlib、pylab与pyplot之间的关系

这些模块其实功能都相同,程序运行的时候都在运行相同的code,不同的是导入模块的方式不同。

2464

扫码关注云+社区

领取腾讯云代金券