您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件测试技术 > 性能测试 > 正文

如何合理规划性能测试拓扑?

发表于:2017-08-06 作者:张老师的小黑屋 来源:

  假设通过性能测试需求分析,我们需要创建一个性能测试场景,并发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迟迟得不到释放,会导致本虚拟用户的内存使用过高,可能引起本机内存瓶颈。