• 11
  • 11
分享

  性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,发现软件系统中存在的性能瓶颈,优化软件,起到优化系统的目的。性能瓶颈定位和调优是个复杂的过程,通常可以从应用参数设置、硬件资源、代码或 SQL 语句、架构或需求等方面综合考量。

  本文以某应用系统性能测试过程中遇到的交易报错入手,详细讲述WAS数据源连接池参数配置对系统性能的影响。

  一、应用系统基本情况介绍

  某应用系统性能测试环境数据库服务器使用Oracle RAC,由两台PC Server物理机组成;应用服务器使用11台PC Server虚拟机,程序运行在WAS上。测试环境WAS与Oracle各项参数配置,在系统初次投产前的性能测试过程中已调整到一个相对合理的值。在之后陆陆续续的系统变更测试时,再未修改过WAS与Oracle的参数配置。

1-1.png

  二、问题发现

  前段时间,该系统要进行操作系统等基础软件升级并同时做B库分库,需要进行性能测试。因应用程序几乎没做大的变动,性能测试更多侧重回归和升级前后的对比,所以选用回放生产交易日志的方式开展测试,覆盖面更广、更接近生产场景。

  测试过程中针对不同并发的压测情况看,部分交易失败,报错“小总控发生未知异常”,报错数量从几千到几万笔不等。进一步查询更详细的错误信息发现,其中部分报错是因为超时,部分报错是因为触发了熔断机制,见下图。

1-2.png

  在排查导致交易超时失败甚至触发熔断的原因过程中,甚至出现了交易成功率大幅波动后,交易几乎全部失败的场景。交易成功率变化曲线见下图。此时,发现数据库已无法连接。

1-3.png

  三、分析与定位

  使用top命令查看数据库服务器资源使用情况,1机CPU使用率user部分为0,进程中已无Oracle相关进程。数据库出现故障,无法启动。只剩2机的数据库还在工作,对外服务能力下降50%。

1-4.png

  停止发压一段时间后,数据库恢复连接,怀疑应该是连接数耗尽了。

  查询数据库允许的最大连接数:

  select value from v$parameter where name = 'processes';   查询返回5000。

  查询数据库当前连接占用数:

  select count(*) from v$process;

  连接占用数一直在4900+,不释放。

  检查WAS数据源连接池参数配置,见下图。

1-5.png

  WAS数据源连接池设置最小20,最大45,未使用的超时时间是1800秒=30分钟。发压时,如数据源连接池中连接数超过20,发压结束后,等待30分钟,连接数最小只会减为20,保持20连接不断开。

  该应用系统数据库C库分库4个,A库分库4个,B库分库4个(B库为每个微服务连其中1个)。因测试环境资源有限,数据库分库并未进行物理分库,而是不同的分库按照不同的数据库用户区分,都部署在了同一套RAC上。因RAC中1机Oracle故障无法启动,所有压力都集中到2机上。按照这种系统架构,每个WAS Server配9个数据源,4个微服务共42个WAS Server,每个数据源最小连接数20计算,共需要占用连接数42*9*20=7560。也就是说如果连接数都能用满,发压结束30分钟后,也还会有7560个连接不释放。

  如果RAC无故障,2个节点最大支持10000process,且系统初次投产时,A、B库均未分库,每个WAS Server只有5个数据源。大并发发压时,连接数没有成为性能瓶颈。此次,分库增加了需要占用的连接,同时1机的故障,更是让数据库服务能力减半。

  四、问题解决

  把数据库连接池最小连接数改为10,最大连接数改为40。这样,最少占用连接数变为42*9*10=3780。再次发压,并在发压过程中与发压结束30分钟后查询各个微服务占用的连接数,验证想法无误。

  同时根据数据库服务器CPU、内存等资源消耗情况,综合考虑,将Oracle process参数调整为8000,适当增加最大连接数,重启数据库生效。

  按照100并发发压,占用连接数最多时到5600+,数据库服务器CPU使用率达到85%,再无因交易超时、触发熔断或获取不到连接导致的“小总控发生未知异常”报错。停止发压30分钟后,占用连接数降低到3200左右。

  五、总结

  从本次测试过程可以看出,随着系统架构、硬件资源、应用性能需求的变化,性能测试过程中应关注应用参数的适应性。从成本和难易度的角度来说,性能调优的一般顺序也从应用参数设置的调整开始。测试环境与生产环境硬件资源、部署架构的差异,造成测试环境应用参数的配置也不能完全照搬生产配置。WAS数据源连接池与Oracle process参数的关系,增加process会有相应句柄、内存的开销,数据库服务器CPU、内存等资源配置是否能支持额外的开销等,都是性能测试人员需要综合考虑的问题。



作者:牛晗晖   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 记得去年这个时候,组内浩浩荡荡地做制度更新,做质量提升,还要求每个组输出落地的措施,基本上是顶着市场的压力给出承诺,并且控制市场投诉的比率和数量肉眼可见的下降。虽然辛苦,但也值得。自研和外包测试有一个很大的区别,外包的工作只需要把事情按时做完就行,但是自研的工作会让你想方设法做提升,做优化,按照优化的成果做绩效评估。所以在不同环境就做好相应的处理吧。下面就简单举个例子:一、当前的问题(线上问题分析及以往版本复盘):版本转测的时候没有整体概念,经常是后端管后端的,前端管前端的转测邮件形同虚设,没有转测意见,也没有附上自测结果修改的问题很容易影响以往老功能:参考礼品卡bug频繁,没有进行深入分析,...
            3 3 6895
            分享
          •   一、技术路线图:  从图上可以看出,测试人员要掌握的东西挺多的,开发懂的我们都得懂,但我们要比开发更具有全局思维和用户思维才行。  这里面没有把大家所负责的业务知识放进去,这个是根据自身行业来的,需要自己行业去规划。  准新人阶段  啥也不懂,需要学习4大类基础知识:  · 软件测试基础理论  · 计算机基础和网络基础  · 操作系统基础(主要是linux)  · 数据库基础(SQL)  1-3年新人阶段  手工测试没问题了,需要学习自动化,掌握各种测试工具:  · python 或 java(选择一门语言进行学习)  · Selenium(Web UI自动化...
            8 9 2577
            分享
          • 一、前言在字节码编程方面有三个比较常见的框架;ASM、byte-buddy、Javassist,他们都可以对这字节码进行操作,只是操作方式和控制粒度不同。其中 ASM 更偏向于底层,需要了解 JVM 虚拟机中指定规范以及对局部变量以及操作数栈的知识。虽然在编写起来比较麻烦,但是它也是性能最好功能最强的字节码操作框架。常见的会用在 CGLIB 动态代理类中,以及一些非入侵的探针监控场景中。另外两个框架都是有强大的 API,操作使用上更加容易控制。虽然对对比上会比 ASM 性能差一些,但不是说性能完全不好。同样在一些监控场景中也用的非常多。如果你细心可以在你的工程 jar 包搜索一下。在这之前我已...
            14 15 1860
            分享
          •   前言  新手在做写代码的时候容易卡壳,尤其当接触的函数以及其他知识比较多的时候,经常会看完需求之后不知道自己该用什么方法来实现它,实现的逻辑可能你有,但怎么该用什么函数给忘了,这其实就是知识的储备不够,你记不住哪个函数有什么作用,自然一头雾水。  这几天我专门整理了Python常用的一些函数,从最基础的输入输出函数到正则等12个板块的,总共100多个常用函数,方便小伙伴们进行快速地记忆,每天快速过一遍,用的时候再加深一下,慢慢地你就会摆脱写代码卡壳的状况。  虽说自学编程的时候我们强调更多的东西是理解和实际去敲代码,但有些东西你是要必须牢记的,否则你写代码将寸步难行。老手当然已经烂记于心,...
            0 0 1006
            分享
          •   个人是去年年底零基础转行,两三千培训费学出来,学完后也是稀里糊涂,仅是知道功能测试就是找问题,其他接口,性能,数据库,python基础,虚拟机搭建网站都实现了课程展示那样。面试资料背了将近一个星期,简历照着别人的改的,培训老师简单模拟了一场,当晚第一次oppo的线上面试,当时紧张的不得了,双腿一直抖,为了缓解压力,还是开着燃气烤火炉面试的,题也是难得一批,linux命令全是不常见,python实现循环根本不会,cookie和session倒是背了,数据库查询考了一条,场景题挂了,最终被虐待体无完肤。第二天去了成都现场面试,期间也有电话面试,第二个面试场景题完败,简单的图片复制测试,我只知道...
            0 0 1056
            分享
      • 51testing软件测试圈微信