淘宝性能自动化测试平台搭建过程

2023-11-09

导读  ID:TOP100case 

淘宝网的性能测试自动化平台具备了分布式、高并发、低成本、可扩展等特性的性能测试平台工具,它包括性能项目管理、环境管理、脚本管理、场景管理、任务管理、监控管理、结果管理等模块,以及前端性能测试模块、性能测试报告模块、性能缺陷模块、和性能基线模块等,后台还有完善的分布式压测引擎管理平台。

本文结合性能测试在企业云架构上的应用案例,介绍淘宝网的性能测试从无到有经历的阶段,同时介绍自主研发的自动化性能测试平台诞生的条件和过程,解析如何使用性能测试的方法保障企业应用的性能,同时如何构建一个性能自动化测试平台。

(全文共9698字   预计阅读时长:12分钟)



淘宝网性能测试团队成立于2009年1月,当时团队只有2个人。从那个时候起,团队成员便开始参与或负责淘宝网的核心技术架构变革的性能测试工作,当时的“五彩石”项目就是团队的一个关键里程碑,它代表了性能测试团队的第一次大规模实践和产出。


团队刚好经历淘宝网的技术由Java初期时代到大规模分布式系统时代,也经历了在这个时代所产生的问题。


性能测试团队发展至今,其成长过程大致可分为业务发展、平台发展和产品上云三个阶段。



 淘宝网性能测试的演变 



淘宝网性能测试的发展过程如表1所示。


表1  淘宝网性能测试的发展

 

 1.1 业务发展阶段(2016年1月到2011年8月)


它是性能测试团队成长的基础,是性能团队、积累和总结的过程。这个阶段在大量的做项目和日常的业务测试,每个成员都同时承担着超过5条产品线的项目性能工作,同时测试的项目最多时可达十余个。在这种高强度高压力的业务测试历练中,团队的每一位成员都拥有了丰富的业务测试经验,对今后团队的发展、技术发展和平台发展都起到了重要的基石作用。


在这个团队雏形时期,产出了具备一定参考价值的《性能测试白皮书》、《性能测试宝典》、《性能测试大型项目压测模型》、《性能测试常用工具和使用方法》、《性能测试流程》等文档;同时也产出了性能测试的各种方案,包括《性能测试设计方案模板》、《性能环境守则》、《性能环境目录规范》、《性能测试报告模板》、《性能测试过程文件》、《性能测试环境搭建规程》、《性能测试流程图》、《性能测试日报模板》、《性能测试资源申请模板》等,这些文档和方案直到现在对于业界新人仍然起到了入门、学习和引导的作用。


 1.2 平台发展阶段(2011年9月到2013年8月)


它是性能测试团队创新的阶段和过程。业务发展到一定阶段,必然需要产品、平台的支持才可以走得更远,更加专业,2011年的8月,团队的TL意识到以下几点:


  • 我们的工具仍然是花费昂贵的Loadrunner;

  • 人手几台Loadrunner物理机,所做的项目仍然有限;

  • 大项目的支持,高并发的支持,仍然做的不好;

  • 工具和人力都成为制约项目性能测试发展的瓶颈;

  • 淘宝普遍使用HSF接口的压测需要封装成http请求,工具使用存在一定的局限性;

  • 更多人想参与到性能测试工作中来。


在当时的系统工具和平台部门下,我们这样一个专业的性能测试团队,却没有一个适合自己、适合淘宝的性能测试工具和平台,这种情况的改变迫在眉睫,去除Loadrunner更是当务之急。


在这个阶段,我们为了解决性能资源申请和透明化、流程化的瓶颈,产出了“T-work性能中心”;为了解决线上线下性能对比的问题,和核心团队合作,开发了“线上线下跟踪体系平台”、“线上线下容量评估平台”,也就是CSP的前身;紧接着团队自己开发了“性能自动化测试平台-PAP”当时还是以Tsung为主性能测试压测引擎,在平台积累了一定量的用户以后,我们继续开发了核心压测引擎“分布式压测引擎-Trunner”、“压测引擎管理平台-Trunner-console”、“前端性能测试平台”等。


同时我们除了前端性能测试,也开始着手研究客户端性能测试方法(旺旺)、无线性能测试方法等,使得性能测试在支持阿里集团各BU上更加专业、更加广泛,且朝着体系化、平台化和系统化的方向发展。


 1.3 共建和云测试发展阶段(2013年9月至今)


在这个阶段,我们团队邀请了更多的人员参与共建。为了适应发展,团队拆分为了平台和业务两个分支。平台的同学继续维护目前的PAP,同时提高用户体验;而业务的同学则分拆到各个业务线。其目的一方面是帮助各业务线建立一套适合自己产品线的性能测试的基线、标准和方法,同时建立回归体系,保障线上产品的稳定;另一方面帮助各业务线测试同学的成长,让性能测试的范围覆盖面更广,使得面向人人性能测试的终极目标更进一步。


这其间,我们团队获得了技术质量部共建优秀团队奖,同时产品共建支持了包括QR、TMD、DUBBO、QTEST、DDOS等更多协议和工具的性能测试工作;也支持了作为JAE的对外核心性能测试平台的工作,同时我们通过双十一和聚石塔的合作,逐渐开始向外部客户发展。从刚开始的ISV到目前的阿里云所有客户,以及面向更多的客户,基于PAP开发了支持ISV双十一等活动的JST_PTS和支持阿里云客户的ALIYUN_PTS,同时也围绕着阿里云客户的需求,融入DTS和管理平台,引入计费模式,最终使得PTS对外正式发布收费,向云测之路又迈出了坚实的一步。



 性能测试评估和流程 



在支持外部客户性能测试的过程中,我们发现,大量的用户认为性能测试只是传统的压测,使用压测工具,配置一个url或者录制一个url就完成了,然后直接开始压测。


其实工具只是一个辅助手段,一个工具有大量的配置规则,一个url也有很多的内容组成,要找到一个适合自己的压测工具、压测方法和压测手段,同时也要了解压哪个url,以及压测url的哪一部分是适合的。


例如一个页面有以下的问题:


第一次测试,网站并发数没有超过35个,大量超时。

第二次测试,网站上做了优化以后,并发用户数100以内时响应 5s ,200以内时90%响应在15s以上,随着并发用户数的增加,页面响应最高可到20多秒。


注:测试工具Loadrunner


我们该如何评估和分析呢?


首先我们要了解这个URL的访问过程如图1所示,分别从访问路径和URL包含内容来分析。


 图1  URL的访问过程


这里,URL经过浏览器,通过网络进入服务器;再通过网络,进入数据库存储,最后返回给用户。


所以性能的评估也要从这几个方面去分析,我们压测的是不是这几个路径,需要压测什么,需要怎么压。


根据以上的路径分析出:


  • 用户的响应时间是指整个页面加载时间;

  • 压测的客户端是否成为瓶颈;

  • 用户测试的网络带宽是否成为瓶颈;

  • 用户的服务器、数据库毫无压力;

  • 用户的测试方法存在问题。


● 2.1 前端性能测试


查看图2我们发现,一个页面的访问,90%以上的时间都消耗在了前端资源(js、css、img)的加载和渲染上,只有5%~10%是消耗在服务器端的响应上。而例子中用户使用loadrunner录制的脚本来做的压力测试(压测),就是带着所有的静态资源来压测,而一个页面有时候会很大,假如是1兆,那么普通网卡最多就是千兆网卡,有些PC机甚至只是百兆网卡(bit),换算下来一秒钟最多访问100M/秒(千兆网卡),所以对于一个1M(Byte)大小的页面,TPS最多就是100,已经达到网卡的极限,再多的并发也没有用,所以就会遇到响应时间上升的情况。

 

图2  页面访问的时间消耗分布


反观淘宝的静态资源都是存放在CDN上,而且有独立域名,这样用户不会和服务器响应共用一个网络,就不存在网卡的瓶颈。


淘宝网的性能测试主要针对5%-10%的html服务器资源进行压测的,基于以下两个因素:


  • 静态资源都没有问题,所以无需压测,也无法压测,不同用户的访问cdn站点不同。

  • 采用局域网方式,尽量忽略网络的影响。因为用户的网络是无法真实模拟的,那么只要提高服务器并发就可以了,不需要关注由于网络导致的波动等情况,保持服务器性能和稳定,那么目标就完成了。


所以,淘宝网的性能测试一般页面响应时间是在300毫秒以下,接口的响应时间在70毫秒或100毫秒以下,就是这个原因。


虽然服务器端的响应只占整个页面响应的5%~10%,但是这个响应是所有用户体验的首要响应,只有服务器端尽快的响应,才能够让后面基于html上的其他资源尽快响应。所以保障服务器端的响应是这个性能测试过程中最重要的环节,同时在保障服务器端响应时间的基础上,更要保障服务器的稳定,也就是测试高并发的情况。


那么是否前端就不需要关注了呢?答案是否定的。前端的测试方法由于是浏览器客户端访问的方式,所有的静态资源在网络环境满足的条件下,需要客户端用户自己的电脑去渲染,包括JS执行等,所以前端的测试有其自身特殊的方法,常见的前端测试工具包括以下产品,如图3所示。


 

图3  常见的前端测试工具


而PAP也有基于WebPagetest的前端性能测试工具,具体的使用方法这里就不再介绍。经过测试后,可以优化的点包括:


  • 静态资源无缓存;

  • JS较大,无压缩,存在重复请求;

  • JS位置不合理;

  • 外部CSS依赖较多;

  • Banner图片较大,且多,无压缩;

  • 后台接口请求较多,可以合并;

  • 页面存在请求失败和跳转的外部资源;

  • 外部依赖接口较慢;

  • 页面请求数较多,主要是JS和CSS重复加载。


优化效果对比如图4所示。


 图4  优化效果对比


Loadrunner里面,去除静态资源的选项如表2所示。


表2  Loadrunner里去除静态资源的选项

 

● 2.2 服务器端性能测试


了解了前端性能测试的原因和方法,我们来看服务器端性能测试方法。


首先,需要了解一下性能测试的指标,如表3所示。


表3  性能测试指标


 图5  load

图6  性能测试的指标GC


● 2.3 PV与TPS的分析


对于一个性能测试,最关键的TPS是怎么换算的。例如用户的预估或者实际的网站访问(PV/天)符合一个正态分布,如图7所示,从0点到24点,那么用户高峰访问的每秒PV,就是我们所要计算的TPS,也就是我们压测的性能目标。如图8所示。


 图7  PV曲线


按照80/20原则,我们需要找到整个面积的80%消耗在多长时间内,比如我们将访问的图拆分成不同的矩形,计算出每个矩形的面积,然后倒序排列相加,找到80%面积的点的时间如图8所示,大概是7/16。

 

图8  PV访问图拆分成不同的矩形换算TPS


所以,平均一天的PV就是PV×80%/(7/16)=X,这个X是平均值,由此计算出它和高峰的系数,PV(F)/X=Y,Y就是系数。那么,用户只要知道他的一天PV是多少,根据这个公式就可以计算出高峰PV,也就是所说的TPS,然后把它作为性能测试的目标来压测。


 2.4 测试方法诠释


 图9   系统处理能力的变化趋势


图9显示了性能测试过程中,随着压力的增加,系统处理能力的变化趋势:

a点:性能期望值

b点:高于期望,系统安全

c点:高于期望,拐点

d点:超过负载,系统崩溃


我们可以做的性能测试a点(性能测试)、b点(负载测试)、c点(压力测试)、d点(异常测试),以及基于这几种类型的长时间稳定性测试,如表4所示。


表4  4种类型的稳定性测试

 

一般测试,很难将服务器给压至崩溃,压测到负载测试后,TPS便相对稳定下来,响应时间反而增长,所以当压力到TPS的增长率小于响应时间(RT)的增长率时,这个时候的并发,就是系统所能承受的最大并发,再大便无意义,也不便于发现和分析问题。压力测试通过标准如表5所示。


表5  通过标准



 基于云产品的门户网站性能优化案例



 3.1 背景


不久前,有幸经历了一个规模较大的门户网站的性能优化工作,该网站的开发和合作涉及多个组织和部门,同时上线时间非常紧迫,关注度也很高。


下面将以此项工作作为典型案例,与大家分享一下基于云产品的门户网站性能优化,内容包括如何使用PTS的压测工具、压测前的性能问题评估,以及压测执行后的问题分析、瓶颈定位等。


该门户网站的服务器存放在华通和阿里云的平台上,所以对华通和阿里共建的云平台安全及应急措施要求也非常高,需要团队给予全力的保障和配合。


先介绍一下PTS,性能测试服务(Performance Test Service,简称PTS)是集测试机管理、测试脚本管理、测试场景管理、测试任务管理、测试结果管理为一体的性能云测试平台,可以帮助您全方位的评估云上系统性能。如表6所示。


表6  PTS的产品优势


本次优化主要是使用了该测试平台服务对客户搭建在ECS上的服务器进行多种类型(性能测试、负载测试、压力测试、稳定性测试、混合场景测试、异常测试等)的性能压测、调试和分析,最终达到满足期望预估的性能目标值,且上线后在高峰期也满足了实际的性能和稳定要求。


 3.2  评估


本次性能测试过程的参与者包括了阿里云应急保障小组等多部门人员,网站为外部供应商开发,阿里云提供云主机和技术支持。


该网站前期已由其他部门做了验收工作,并进行了完整的性能测试。报告显示,性能较差。第一次测试,网站并发数没有超过35个;第二次测试,网站做了优化后,静态页面缩小,并发用户数100内5秒,200内90%响应在15秒以上。随着并发用户数的增加,页面响应最高可到20多秒,而且访问明显感觉较慢,联系了阿里云的技术支持,希望能够帮助诊断性能问题,给出优化建议。真正的测试优化时间只有不到3天时间。如表7所示。


表7  优化后的测试时间


经评估得出最终的测试目标要求:带页面的所有静态资源,响应时间必须小于5秒,同时并发访问用户数最低500,TPS根据实际的结果得出。


 3.3 分析


结合Loadrunner的使用经验,团队的第一感觉就是用户测试方法可能有误,一个页面加载对于阿里的应用来说,都是1秒以下的,也就是毫秒级别的,不会出现几秒的现象。而用户测试结果都以秒来衡量,所以测试页面肯定是带了静态资源一起压测的。


这样的测试,其实模拟了用户的整个页面访问情况。它有一个弊端,就是带宽。一般人的电脑都是百兆网卡,最好的服务器目前也只是千兆网卡,万兆很少见,如果一个页面按照500K的大小来计算,百兆网卡的压测客户端,最大1秒钟并发约25个(100M*1000(Kb)/8/500(KB)=25),网卡打满后,再增加压力,增加并发,TPS不会升高,而响应时间则会升高,才会达到1秒,5秒,甚至20秒,有时候还会超时。


但这种方法客户认为最接近用户体验,属于页面全部加载完了。我们分析,一方面浏览器加载静态资源肯定不是串行的,同时还有js的执行时间无法模拟;另一方面静态资源都是会缓存的,如果每次压测都要下载静态资源也不妥。所以这种方式并没有真实模拟用户访问的,如图10所示。当然也不排除有些测试工具是可以模拟这种并发的,至少在该项目中,没有这样去做。


图10  页面加载时间分布图


注:页面的响应时间88%左右都消耗在前端资源加载上,服务器端消耗只占到了页面响应的12%左右。


这种场景适合如JS、css、image等静态资源和后端代码放置在同一台服务器上的情况。


一个网站的响应一般由前端、网络、服务器和数据库四部分时间组成,如图11所示。前端主要是减小页面大小,减小页面请求数,优化页面js;网络主要是使用CDN,优化连接数;服务器主要是优化Apache、Tomcat、java代码等,数据库则优化sql语句,优化索引,优化数据存储等。


 图11  组成网站响应的4部分


 3.4 测试和优化


先不讨论原来的测试方法是否准确,我们首先以测试和优化为目的,对该门户网站进行测试和分析,内容包括以下方面。


3.4.1 页面前端分析和优化


对页面的优化从前端开始。首先通过PTS的前端测试工具(未开放),再结合Yslow(yahoo前端测试工具)、Pagespeed等扫描,发现以下问题并进行优化。


  • 静态文件无缓存,服务器配置解决;

  • Js较大,无压缩,同时存在重复请求,最多一个js加载4次,已做压缩和减少;

  • Js位置不合理,阻碍页面加载;

  • 外部css考虑本地实现,减少调用;

  • Banner背景图片较多,无压缩,建议合并;

  • 页面1的后台.do有4个,减少为3个;

  • 页面2的后台do有2个,减少为1个;

  • 存在加载失败链接,404失败,同时次数非常多,更换为cnzz;

  • 页面加载外部资源失败(qq等),且不稳定;

  • 分享功能比较慢;

  • 外部资源建议异步实现,目前全部是jquery渲染,iframe嵌套,时间资源限制,后期优化;

  • 尽量减少或者不使用iframe;

  • 页面请求数太多,主要是js和css重复加载问题和图片较小导致的。


第一阶段性成果:在进行了第一轮的前端优化后,性能提高25%,首页响应从1.5秒提高到1.1秒,并且前端优化持续进行。如表8。


表8  前端优化的结果


前端页面最终结果:

最初的startRender(页面首次渲染)时间由1.5秒变为0.8秒;完全加载时间由4秒下降至2.8秒;domReady(DOM结构完成)时间由3.2秒下降至2.75秒。


遗留问题:其他页面未做测试,前端测试工具会在今后的发展中整合在阿里云PTS的性能测试平台当中,整体关注页面性能。


3.4.2 服务器端优化


服务器端优化主要就是针对图3中12%的页面性能,一般核心页面要求在300毫秒以下,非核心页面要求在500毫秒以下,同时重点关注并发时的负载和稳定,服务器端代码和响应的快速稳定是整个页面性能的重点。


PTS脚本编写和场景构造


根据前期需求评估的内容,客户是一个门户网站,是由不同功能的页面组成,各个功能页面中又包含了静态内容和异步动态请求,所以,PTS脚本的编写主要涵盖了各页面的请求和相关静态资源的请求,这里存在一个串行和并行的概念。


串行:请求的页面和页面当中的静态资源、异步动态请求组成一个同步请求,每个内容都作为一个事务(也可以共同组成一个事务,分开事务的好处是可以统计各部分的响应时间),这样压测任务执行时,线程就会根据事务的顺序分布调用执行,相当于页面的顺序加载,弊端是无法模拟实际IE的小范围并发,但这样测试的结果是最严格的。


并行:各个页面使用不同的任务,采用并行的混合场景执行,同时设置一定的比例(并发用户数),保证服务器承受的压力与实际用户访问相似。

场景并发用户数:经常会遇到“设置多大并发用户数合适?”的问题,我们有一个公式。


在寻找合适的并发用户数上,建议使用PTS的“梯度模式”,逐渐增加并发用户数,这个时候压力也会越来越大,当TPS的增长率小于响应时间的增长率时,这就是性能的拐点,也就是最合理的并发用户数;当TPS不再增长或者下降时,这个时候的压力就是最大的压力,所使用的并发用户数就是最大的并发用户数。如果此时的TPS不满足你的要求,那么就需要寻找瓶颈来优化。如图9演示的一个性能曲线:


a点:性能期望值

b点:高于期望,系统安全

c点:高于期望,拐点

d点:超过负载,系统崩溃


注意:使用外网地址压测可能会造成瞬时流量较大,产生流量计费,建议使用内网地址压测,避免损失。


第一阶段


在按照客户提供的4个URL请求构造场景压测以后,根据实际情况和客户要求,使用PTS,构造相应的场景和脚本,模拟用户实际访问情况,并且脚本中加上了img、js、css等各一个的最大静态资源。


条件:5台ECS机器,300并发用户数,一个后台页面加3个静态页面(共150K);


结果:静态4000TPS,动态1500TPS,服务器资源:CPU 98%。如表9所示。


表9  使用PTS脚本编写和场景构造的条件和结果


分析和优化


服务器资源消耗较高,超过75%,存在瓶颈,分析平台显示如图12所示。


 图12  分析平台显示结果


分析:主要原因是apache到tomcat的连接等待导致,现象是100个并发压测,就有100个tomcat的java线程,而且全部是runnable的状态,轮询耗时较多。


同时发现用户使用的是http协议,非ajp协议。但这个改动较大,需要使用mod_jk模块,时间原因,暂缓。


解决方法:修改了Apache和tomcat的连接协议,以nio协议取代ssl协议。Tomcat连接数据库池由30初始调整为300,减少开销

<Connector port="8080" protocol="org.apache.coyote.http11. Http11NioProtocol"connectionTimeout="20000" redirectPort="8443" />


性能对比:

  • 再进行1轮含动态含静态文件压测,TPS能够从1W达到2.7W,性能提高将近3倍,并且tomcat的线程从原来的200跑满,降到100左右并且线程没有持续跑满,2.6W TPS时候CPU在80%左右;

  • 发现机器的核数为2核,8G内存,对于CPU达到98%的情况,CPU是瓶颈,而对于应用来说比较浪费,所以将2核统一升级为4核。

  • 扩展机器资源,从目前的4台扩到6台,同时准备4台备份,以应对访问量较大的情况。


思考和风险


  • 异步请求处理。

客户所提供的URL都是html静态,虽然页面中含动态数据,但分析后发现动态数据都是通过jquery执行然后iframe嵌套的,所以不会随着html文件的加载而自动加载,需要分析所有的动态页面,同时压测,这是页面存在异步请求需要关注的地方。


  • Iframe

Iframe嵌套页面的方式优点是静态资源调用方便、页面和程序可以分离。但是它的缺点也显而易见,包括样式、脚本额外注入,增加请求等等;还有搜索引擎搜索不到内容;iframe创建比其他元素慢1~2个数量级;资源重复加载;iframe会阻塞页面加载,阻塞onload事件;占用主页连接池;html5不再支持。所以建议尽量不要使用或者少使用。


  • 脚本录制和模拟实际用户访问

当用户的图片、javascript、CSS等静态资源和后端代码在同一台服务器上时,需要模拟用户的实际访问请求,压测脚本涵盖所有链接和资源。那么使用脚本录制功能就可以采集更全更完整的脚本。


第二阶段


找到几个页面的所有动态资源后,整合成为一个事务,串行访问,同时并发压测,从而对纯服务器端进行压测。由于动态页面依赖RDS数据库,所以性能相对较差,测试结果如表10所示。


表10  测试结果


对以上通过测试结果的页面一和页面二的响应时间分别达到了5秒和2秒(图13),性能较差,整体TPS只有11,如图14所示。

 

图13  第二阶段的响应时间

 图14  第二阶段的TPS


对以上结果的性能分析:响应时间长的主要原因在RDS数据库,数据库此时的CPU已经达到100%,处理较慢,分析应与sql有关。


优化方法:数据库第一批优化完毕,优化了6条sql语句,使原来5s左右时间,优化至150ms左右,数据库的QPS 从1k上升到6k。


RDS优化内容包括:优化点主要是调整慢sql的索引,部分sql需要调整表结构和sql写法,需要应用配合才能完成优化。优化前QPS在1000左右,优化后QPS到达6000,如图15所示。


 图15  优化后的QPS到达6000


前端响应时间从5秒降低到150毫秒,前台TPS由150提升到1500,优化前后对比如图16和图17所示。

 

图16  优化前的响应时间

 

图17  优化后的响应时间


优化后的性能数据如表11所示。


表11  优化后的性能数据


总的TPS可以达到2000,有个失败的页面存在问题,忽略。

 

第三阶段


压测目的:通过PTS模拟用户实际访问情况,包括所有静态资源,评估当响应时间小于5秒的时候,最大支撑的并发用户数。


测试结果如表12所示。


表12  当响应时间小于5秒时,最大支撑的并发用户数统计时间段


可以看到,所有的事务RT加起来小于5秒的情况下,并发用户数可以达到3000,满足测试要求。如图18和图19所示。

 

图18  第三阶段的TPS

 

图19  第三阶段的响应时间


优化前后的对比如表13所示。


表13  优化前后的三项对比


第四阶段


压测目的:评估其他非主站应用的性能以及含静态页面的其他5个页面,内容包括:搜索压测、操作压测、登录压测、证书登入和针对5个常用场景进行混合压测。


测试结果如表14所示。


表14  其他非主流站应用的性能及静态页面5个页面的测试成果


备注:

  • 5台ECS服务器构成的集群;

  • 虽然个别页面已经过优化,但仍然存在可以调整的空间。


风险和问题:


① 测试发现流量存在非常明显的波动,不经过某模块就无此问题,发现有大量的reset连接,会诊后得出端口复用导致的问题以及FULL NAT模式和LVS存在兼容性问题。


由于存在兼容性问题,影响到网站的稳定性和性能,暂时不加载该模块,待问题解决后再加。先使用另外一个模块代替。


不通过模块的测试结果,如图20所示。

图20  不通过模块的测试结果


通过模块后测试结果,如图21所示。


 图21  通过模块后的测试结果


② 凌晨2点,针对单点用户登入进行了压测,发现100并发,该业务接口已宕机。分析结果。


  • SLB负载只能进行load负载,无法进行宕机冗余。

  • Cache缓存设置太小,1G内存容量导致内存溢出,建议修改为4G。

  • 使用http协议性能不佳。早上4点30进行少量代码优化后,业务直接不可用,环境出现宕机无法修复;快速进行快照恢复,5分钟内恢复3台业务机,云产品的优势尽显。

  • 用户log日志撑满系统盘,并且一直不知这台云主机还有数据盘。我们要做反思,帮助用户进行挂盘及日志迁移至数据盘,减少单盘的IO压力。


③ Web服务器数据同步,发现服务器IO和CPU压力过大。


  • 加入inotify机制,由文件增量同步,变更为文件系统的变化通知机制。将冷备及4台备用web机器使用该方式同步,目前,查看内容分发主机IO和CPU使用率已恢复正常范围。

  • 同步推送时间,根据服务器的负载,进行调整同步时间,已修改为2分钟。

  • 由于备份量大,适时进行全量同步。

  • 新增4台备用机,已关闭apache 端口 自动从slb去除,作为冷备。


④ 由于目前单点用户登入入口存在架构单点宕机风险,进行登入和未登入风险验证,确认,如用户已登入后,登入业务系统出现宕机,进行简单的页面点击切换,不受影响。


⑤ 内存优化


如图22所示,按照JVM内存管理模式,调整系统启动参数。如果一台ECS部署一台服务器,建议不要选择默认的JVM配置,应该设置内存为物理内存的一半,同时设置相应的YTC和FGC策略,观察Old区变化,避免大量Full GC,建议Full GC频率大于1小时,同时GC时间小于1秒钟。


 图22  内存优化


3.4.3 架构优化


  • 单点登录服务修改为SLB; 

  • 检索 修改为 SLB;

  • 内容管理云平台云服务器实现行文件差异同步,同时冷备;

  • 新增4台web机器5.5总结。


最终优化后的网站页面性能满足测试要求,优化前后的对比如表15、表16所示。


门户首页:

表15  架构优化前后的对比


备注:服务器的CPU达到100%其实是一个好现象,说明我们的逻辑全部走到了资源消耗上,而不是由外部其他逻辑限制或blocked,这种现象带来的好处就是,可以集中精力从减少代码的资源消耗上解决问题,带来性能的改善;

其次,实在无法优化也可以增加机器台数,通过横向扩展让性能成倍的提高,这也是用成本换性能的方法。当然,前提是架构上支持负载均衡的分布式架构。


其他分页见表16。


表16  并发用户数达到500后的三项数据



 3.5  遗留问题和风险


  • 时间原因,测试页面有限,有些页面没有测试覆盖到,比如后台页面。

  • 登录系统存在内存风险,由于用户的缓存信息仍然存在单点问题,所以风险较大,同时系统压力不满足要求,并发较高,存在crash风险,未来得及发现瓶颈所在。彻底解决必须使用OCS等缓存系统改造,同时优化数据库。

  • Iframe框架造成用户体验不好,需要改进,换成异步js接口方式。

  • 后台同步系统对资源消耗影响较大,需要持续优化。

  • 应该提供开发和测试进行自主压测、分析、评估,同时提供统一的测试报告,保证各部分模块的性能,整合起来才能保障整个门户网站的性能。

  • CPU优化还需要继续分析跟进,目前只是增加机器资源降低风险,成本较高。

  • 上线发布应该具备统一的回归验证机制,并且日常需要持续优化,避免由于后期代码的改动导致性能下降。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

淘宝性能自动化测试平台搭建过程 的相关文章

  • java web项目答辩答辩题总结(书本网上语言答辩+自己的语言答辩)

    答辩每个人的总分为1 5分 每个人主要问3个问题 开发流程 系统架构 项目模块 功能 项目得失重定向与转发 九个隐式对象 get与post的区辨 jsp有静态包含 动态包含 两者的区辨 什么是MVC web系统架构 java web项目答辩
  • 测试用例设计方法——等价类

    等价类 思路 输入的集合是无穷的 不能全部都覆盖到 依据需求将输入 特殊情况下会考虑输出 划分为若干个等价类 从等价类中挑选一个测试用例 如果这个测试用例通过 则认为所代表的等价类通过 这样就可以用较少的测试用例达到尽可能多的功能覆盖 解决
  • Servlet+JSP+JavaBean开发模式(MVC)介绍

    好伤心 写登陆注册之前看见一篇很好的博文 没有收藏 然后找不到了 前几天在知乎上看见一个问题 什么时候感觉最无力 前两天一直想回答 尝试过google到的所有solve case 结果bug依然在 今天想回答 明明遇见过 就是找不到那篇文的
  • .NetCore技术研究-ConfigurationManager在单元测试下的坑

    最近在将原有代码迁移 NET Core 代码的迁移基本很快 当然也遇到了不少坑 重构了不少 后续逐步总结分享给大家 今天总结分享一下ConfigurationManager遇到的一个问题 先说一下场景 迁移 NET Core后 已有的配置文
  • 使用KIF进行功能性iOS UI测试

    开始使用KIF 从Github下载KIF源资产并将其放置在可以轻松找到的地方 或者 可以使用 Git 的子模块来获取本地使用的源代码 git 初始化 git submodule 添加 https github com kif framewo
  • 对话框中添加视图方法- CScrollView

    对话框中使用视图方法 今天工作过程中 又遇到了显示图片问题 为此把以前的代码整理一下 通过使用自定义的类继承CScrollView类 是图片或文字等 等能够通过滑块进行自动操作显示 记录查询 步骤 1 建立基本对话框程序 添加一个stati
  • Bicubic Interpolation (双三次插值)

    在Wikipedia http en wikipedia org wiki Bicubic interpolation 上找到了bicubic的描述 不过它只给出了知道导数情况下的公式 后来在CSDN上找到了C语言的算法描述 http to
  • selenium.common.exceptions.WebDriverException: Message: ‘chromedriver‘ executable needs to be in P

    selenium在liunx下配置报错解决方式 1 首先 打开浏览器 输入 chrome version 可以看到版本号 2 打开这个链接 http chromedriver storage googleapis com index htm
  • 从零开始写一个Javascript解析器

    最近在研究 AST 之前有一篇文章 面试官 你了解过 Babel 吗 写过 Babel 插件吗 答 没有 卒 为什么要去了解它 因为懂得 AST 真的可以为所欲为 简单点说 使用 Javascript 运行Javascript代码 这篇文章
  • hdu2030 汉字统计

    hdu2030 汉字统计 Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 4080 Accepted
  • 袁红岗的编程感悟

    我自己知道 近几年也一直在用 但就是说不出来 直到最近几天才能够表达 叫作Think in Code 也就是用代码思考 同时也把代码当成自己思想表达的方式 正如哲学家用文字设计 诠释思想 程序员 说话 用的是代码 这就是一个程序员的境 界
  • 【app测试】adb常用指令及华为卸载预置软件

    adb基础指令 1 adb devices 显示当前运行的全部Android设备 2 adb s 设备编号 对某一设备执行命令 3 adb install APK路径 安装应用程序 r表示replace覆盖安装 连接了多台设备时 需要指定设
  • 自学软件测试需要多久?怎么自学软件测试?自学软件测试可以找到工作吗? 绝对干货!

    一 前言 最近经常有很多朋友问我想要入行软件测试 但是都不知道该怎么学 这里详细的给大家说下 对于0基础的朋友 应该怎么去学习软件测试 学习软件测试有2条路可以选 1 找个靠谱的培训机构去培训啦 你就什么都不用想了 跟着培训结构认真的学习就
  • oracle批量绑定 forall bulk collect用法以及测试案例

    一 如何使用批挷定提高性能 How Do Bulk Binds Improve Performance 在PL SQL 和SQL引擎 engines 中 太多的上下文切换 context switches 会影响性能 这个会发生在当一个循环
  • IntelliJ IDEA中如何使用JUnit4

    背景 最近参与了一个Anroid医疗项目 其中项目底层有很多基础类及通讯类 而且很多涉及复杂的字节操作还有多线程同步及状态机处理 这样的项目做一下TDD还是必要的 尽量项目前期把风险降低一些 现在的问题是本人使用的是IntelliJ开发的A
  • 软件测试题目

    一 判断题 每题2分 20 1 软件测试就是为了验证软件功能实现的是否正确 是否完成既定目标的活动 所以软件测试在软件工程的后期才开始具体的工作 初级 2 发现错误多的模块 残留在模块中的错误也多 初级 3 测试人员在测试过程中发现一处问题
  • 重命名文件或目录(renameTo)

    File or directory with old name File file new File oldname File or directory with new name File file2 new File newname R
  • 网管员牢记 10种较为常见的服务器管理错误

    网管员牢记 10种较为常见的服务器管理错误 网络管理阶层的工作就是保证网络的正常工作 从而使得职工们的工作不被打断 可问题在于事物并非总是按照理想状况发展 事实上经常会出现平地起风波的状况 其间有许多原因 这里我们只讨论10种较为常见的网管
  • 008-黑盒测试和白盒测试的优缺点

    黑盒测试和白盒测试的优缺点 黑盒测试的优点有 比较简单 不需要了解程序内部的代码及实现 与软件的内部实现无关 从用户角度出发 能很容易的知道用户会用到哪些功能 会遇到哪些问题 基于软件开发文档 所以也能知道软件实现了文档中的哪些功能 在做软
  • ASTM D6147测定压缩情况下硫化橡胶和热塑弹性体作用力衰减 (应力松弛) 的标准试验方法

    标准名称 ASTM D6147 Standard Test Method for Vulcanized Rubber and Thermoplastic Elastomer Determination of Force Decay Stre

随机推荐

  • 看完保证你会配置 logback ,太厉害了!

    logack 简介 目前还没有看过日志类框架的源码 仅限于如何使用 所以就不说那些 空话 了 最直观的认知是 logback和log4j是一个人写的 springboot默认使用的日志框架是logback 三个模块组成 logback co
  • 如何使用chrome来设置和调试session、cookie、localstorage

    1 打开chrome 2 按F12快捷键 打开调试界面 3 选中console的tab页 4 直接在 gt 后输入命令 localStorage setItem name Bob console log localStorage getIt
  • Mybatis开发积累的一些好用知识,mapper接口传参详解,源码解析

    Mybaits应该很多的Java开发者都用到了 但是有一些功能想必不少的开发者不能灵活使用 或者使用的时候不理解 使用的时候总犹豫感觉用的迷迷糊糊的 今天就结合源码给大家解决疑惑 mapper接口传参的方式有很多方式 下面会一一列举 最后看
  • JVM常见命令之jinfo

    1 jinfo help 帮助文档 参数说明 pid 对应jvm的进程id executable core 产生core dump文件 server id remote server IP or hostname 远程的ip或者hostna
  • c# 委托的同步调用(invoke)和异步调用(beginvoke)

    using System using System Collections Generic using System ComponentModel using System Data using System Drawing using S
  • css--边框 背景图

    边框 border width 20px 边框的宽度 border style solid dashed dotted double none 边框的样式 solid 实线 dashed 虚线 datted 点划线 double 双实线 n
  • 快速简单带你入门学会STM32串口通信以及USART

    快速简单带你入门学会STM32串口通信以及USART 通信的方式可以分为多种 按照数据传送方式可分为串行通信和并行 通信 按照通信的数据同步方式 可分为异同通信和同步通信 按照数 据的传输方向又可分为单工 半双工和全双工通信 下面我们就来简
  • windows安装nacos步骤,还有那些坑

    废话不多说 问题一一列出 下载nacos Releases alibaba nacos GitHub 1 找到解压目录 输入cmd 回车 执行命令 startup cmd启动 也可以执行startup cmd m standalone 单机
  • 驱动电路(电压驱动、电流驱动)

    1 驱动电路 百度百科 2 基于三极管的继电器驱动电路 电子发烧友网 3 led驱动电路 百度百科 4 驱动电路技术 电子发烧友网 5 详细分析常见开关电源中的7种驱动电路 附有图片 KIA MOS管 6 驱动电路的作用 7 恒流源驱动电路
  • python 判断等于0_Python 条件语句介绍

    Python条件语句是通过一条或多条语句的执行结果 True或者False 来决定执行的代码块 可以通过下图来简单了解条件语句的执行过程 Python程序语言指定任何非0和非空 null 值为true 0 或者 null为false Pyt
  • Qt图形化界面学习之资源文件添加

    首先 我们开始试着用ui界面来进行上节的功能实现 菜单栏 工具栏 状态栏 在菜单栏的二级菜单设计中 名字只能输入英文 创建后再修改为中文 因为文件创建action的时候是按照你输入的英文创建的 我们可以修改text属性来修改名字 改为中文
  • 安卓自动化工具:解锁屏幕+打开支付宝蚂蚁森林+收取能量+种树浇水+自动退出

    安卓自动化工具 解锁屏幕 打开支付宝蚂蚁森林 收取能量 种树浇水 自动退出 一 实现方法 Tasker 定时任务 启动各个部件 Auto js 脚本解锁屏幕 Autoinput 模拟点击屏幕 VirtualXposed 收集能量 遍历好友
  • 微信小程序——未读消息小红点的显示

    显示 tabBar 某一项的右上角的红点 属性 index 是tabBar 的哪一项 从左边算起 wx showTabBarRedDot index 2 效果
  • 【论文阅读】基于深度学习的时序预测——Informer

    系列文章链接 论文一 2020 Informer 长时序数据预测 论文二 2021 Autoformer 长序列数据预测 论文三 2022 FEDformer 长序列数据预测 论文四 2022 Non Stationary Transfor
  • Vue下载txt格式的文件

    2023年07月26日 天气 多云转阴 今天在做导出文件的时候 因包含有txt格式的文件 在导出的时候 浏览器会自动解析txt文件 而不是下载 于是快刀斩乱麻搜索资料 并结合总结 运用项目中 大功告成一半 因为导出时成功了 但txt文件下载
  • 根轨迹法学习

    根轨迹法 随着低频环路增益的变化 追踪闭环传递函数的极点和零点在复平面上的变化趋势 其中相角条件是决定根轨迹的充要条件 s平面上一点若满足相角条件 则一定在根轨迹上 幅值条件为必要条件 再通过幅值方程求出K值 K即为1 betaH中beta
  • 二阶段目标检测介绍

    二阶段目标检测算法 RCNN 家族 是目标检测中最经典的算法之一 有 R CNN gt Fast R CNN gt Faster R CNN 每一代的变化以及目的性都明确 也是目标检测领域二阶段检测必会的算法之一 如果想对目标检测有更多了解
  • VUE 构建清除注释、依赖包版本号

    问题 vue项目构建生成的js文件包含一些注释 里面含使用的依赖包及版本信息 可能会对网站造成危害 那么如何清除掉这些注释呢 解决方法 首先查看项目里webpack的版本号 npm list webpack 根据webpack版本号更新 h
  • Java解析省份城市

    Java解析省份城市 json文件 ps 地址可能不全 仅供参考 格式化导入地址 param address return public String formatAddr String address if address null re
  • 淘宝性能自动化测试平台搭建过程

    导读 ID TOP100case 淘宝网的性能测试自动化平台具备了分布式 高并发 低成本 可扩展等特性的性能测试平台工具 它包括性能项目管理 环境管理 脚本管理 场景管理 任务管理 监控管理 结果管理等模块 以及前端性能测试模块 性能测试报