• 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软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   1,名词解释  FPGA(Field-Programmable Gate Array),即现场可编程门阵列  以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局布线,快速的下载到 FPGA 上进行软件测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。  专用集成电路  英文全称:Application Specific Int...
            1 0 5076
            分享
          • 写作单元测试代码的好处熟悉单元测试技术,了解相关的基本原理;掌握代码,积累代码编写经验,积累调试经验,积累分析问题、解决问题的经验;训练动手能力,单元测试代码不是业务代码,开发、维护过程中不需要特别关注质量要求,底限是达到验证业务代码逻辑性的目的,因而比修改代码要省心、省事;不需要准备项目运行环境,单元测试代码在运行时的外部依赖比较少,执行验证、调试代码的代价会很低;降低新手程序员进入项目的门槛,有助于积累信心。项目过程中写单元测试的好处一边写代码,一边检查代码中的小错误或者小疏忽,提前解决代码中可能存在的笔误;为了让单元测试代码更好写,需要花点心思在思考类和方法的结构,好处是可以有效的提升代...
            0 0 1111
            分享
          •   我们不应该仅仅局限于某一种工具,性能测试能使用的工具非常多,选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验,也算略有小成,任何性能测试(如压力测试、负载测试、疲劳强度测试等)都可以使用该工具。但我并不鼓励这样做,我们应该根据当前所处的情况,基于被测对象、时间及成本考虑,采用最合适的工具。闲话少谈,今天笔者要给大家分享的是用Jmeter来进行HTTP接口的压力测试。实际接口测试还可以使用Tsung、SoapUI等工具,但基于各方面考虑,最终采用了Jmeter。  Jmeter相对于Loadrunner来说,更轻,易于安装,如果对过程数据收集不多、测试场景...
            0 0 732
            分享
          •   应用场景  “这个测试用例的前置条件、步骤、检验点是什么?”  “让我看下代码。”  这可能是大多数做自动化测试的朋友遇到一种场景吧。  用例多了、代码有时候也就 “乱” 了。 清晰明了地组织自己的测试场景,让领导、同事一看就明白的你的测试步骤与检查点,不用费神费力地解释,又简单快速地维护用例代码。  这就是今天向大家介绍的BDD,让你的测试工作变得更高效、更简洁。  温馨提示  如果阅读者想按示例进行操作,您一定要具备以下的配置, 当然您也可以使用其它IDE。  自动化框架:Cucumber+Selenium  语言:Java  项目:Maven  IDE:IntelliJ IDEA  ...
            12 12 1377
            分享
          • 今天做接口测试,有个接口的参数使用了 AES 加密,开发也提供了加密函数的实现,但是 Python2.6 实现的,我习惯使用的是 Python3.4,于是准备做下兼容处理,结果过程中发现安装 pycrypto 库会报错。作为测试,定位问题并解决问题乃是我们的强项,于是花了点时间把问题处理了,顺便把解决的结果做个记录,如果后面有同学碰到同样的问题,也不用重复踩坑了。先看看我安装库用的命令行:python34 -m pip install pycrypto下面是报错信息:running build_ext warning: GMP or MPIR library not found; Not bu...
            1 1 1187
            分享
      • 51testing软件测试圈微信