热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

压力测试tps性能下降问题解决方案

压力测试tps性能下降问题解决方案背景测力测试时反映tps一直下滑的问题,为了重现该问题,开发一个简单交易进行测试,测试代码如下录制该交易脚本,并放在LoadRu

压力测试tps性能下降问题解决方案 背景

测力测试时反映tps一直下滑的问题,为了重现该问题,开发一个简单交易进行测试,测试代码如下

 

录制该交易脚本,并放在LoadRunner11中进行测试,场景为10个用户同时启动并持续的跑。可以看到1分钟之后tps开始下降,并在后期持续下降。

 

此时分析服务端日志、javacore、heapdump、gc等,并未发现异常现象。修改服务端线程池相关等,但测试结果却是一如既往的下滑。记录服务端处理请求时间,发现一直很稳定,初步怀疑是客户端压力不够导致,但一直无具体证据,因此压测tps下滑问题一度搁置。

 

转折点

本周一时,一同事开始做压力测试,交流这个问题后,那边现场也开始了类似测试,但测试结果如出一辙。后来广发使用了LoadRunner中的按进程运行vuser,测试效果如下。可以看到,整个过程跑了3个小时,tps一直稳定在950左右,这下总算有了突破口。

 

分析

LoadRunner中按进程运行vuser与按线程运行vuser跑出来的结果竟然会有那么大区别,那么他们两者的结果为什么差别那么大呢。

LoadRunner中对这两种分别是这样说明的:

Ø 按线程运行vuser

    启动多线程以便每台负载生成器计算机运行更多的vuser。

Ø 按进程运行vuser

    禁用多线程并将每个vuser作为完整的进程运行。用于非线程安全协议

 

网上对于两者有这样的解释:

线程的资源是从进程资源中分配出来的,因此同一个进程中的多个线程会有共享的内存空间

 

那么回过头来使用神器javavisualvm查看下使用按线程运行vuser时mdrv.exe(lr跑vuser的程序)进程的内存使用情况,可以看到运行7分钟时间内fullgc执行了94次,仔细看下可以发现新生代为896k+64k*2=1024k,最大4992k,年老代为4m,最大59.125m。此时猜想为jvm内存分配太小导致的

 

 

调优

现在调整下虚拟机内存并使用同样的场景进行测试,jvm参数与测试结果如下:

Jvm参数:-Xmn128m -Xmx384m -Xms384m-XX:PermSize=64m -XX:MaxPermSize=128m

 

 

果然和猜想的一样,测试期间稳定运行,下面为本次的内存使用截图

 

可以看到年老代内存使用一直稳定在1.457m,持久代内存一直稳定在5.616m,

整个过程没有进行fullgc,垃圾回收全部在年轻代。

 

基于本次测试,继续调整基于本场景下的虚拟机参数,增大年轻代,缩小年老代与持久代。并使用同样的场景进行测试,jvm参数与测试结果如下:

 

Jvm参数:-Xmn320m -Xmx384m -Xms384m -XX:PermSize=12m -XX:MaxPermSize=12m

 

继续看测试过程中内存使用情况。

可以看到运行1:40期间,年轻代执行gc 2304次,耗时45.703s,相对于上次测试的运行1:10,年轻代执行gc 3228次,耗时35.965s,有一定的提升。

结论

此次发现的压力测试tps持续下降问题并非由服务端和客户端处理性能导致,而是由压测客户端内存分配不合理导致。

 

后续测试时如出现类似情况可选取按进程运行vuser,也可根据实际运行交易场景进行内存参数调整,保证后续测试正常进行。

 

按进程运行vuser时其中一个进程的内存使用截图:



推荐阅读
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • 子类从父类继承所有的成员(字段,方法,嵌套类),构造方法不属于成员,所有子类不能继承,但是子类可以调用父类的构造方法对于private方法和属性,子类一定是继承了的,但是没有访问权 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • JVM:33 如何查看JVM的Full GC日志
    1.示例代码packagecom.webcode;publicclassDemo4{publicstaticvoidmain(String[]args){byte[]arr ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
author-avatar
青烟_I乀n-a_396
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有