震惊性能测试圈的经典案例!!

JVM性能案例分享---今天来给大家分享几则性能分析和调优的案例:


案例一:回收器选择不当导致频繁FGC

【问题描述】

使用单台8C8G压力机Jmeter压测A系统,约3mins内存就占满4G,频繁出现FGC

                             



【性能场景】

单机模式下,使用500并发持续压测http明文接口;

默认jvm配置:-Xms1024m -Xmx2048m -XX:NewSize=512m


【分析和调优过程】

1. 怀疑依赖jar包的方法导致内存泄露,打印dump内存文件进行分析,占用内存较大对象都是比较底层方法,没有线索。排查jar包内的方法,是否存在大对象或者一直new对象的操作,方法都很简单,并没有上述情况。


2. 转变思考方向,从jvm调优入手。加大堆内存:-Xms4096m-Xmx4096m -XX:NewSize=512m –Xss512kFullGC频率比之前降低,但对压测结果并没有改善;继续调整:-Xms4096m-Xmx4096m -XX:NewSize=512m –Xss256kFullGC频率又有所降低。


3. 查询当前jvm的相关信息,发现默认使用的UseParallelGC(新生代用ParallelGC回收器老年代使用串行回收器)收集器。在多核大并发情况下,CMS回收器性能更优。jvm参数开启CMS回收器,并增加CMS回收器相关配置: -XX:+CMSClassUnloadingEnabled -Xmx4096m -Xms4096m-XX:PermSize=512m -Xss256k -XX:CMSInitiatingOccupancyFraction=75-XX:+UseConcMarkSweepGC,性能问题解决,FullGC频率降低10分钟1次,每次FullGC都比较彻底,长时间压测性能结果很稳定。


案例二:堆内存参数设置不当导致频繁FGC

【问题描述】

现象:使用jvm默认收集器时,FGC很正常。开启cms收集器后,FGC10几秒1次,观察内存情况,发现old区内存增长很快。默认jvm配置如下:-XX:+CMSClassUnloadingEnabled–Xmx4096m –Xms4096m -XX:+UseConcMarkSweepGC


【分析和调优过程】

1.      思考发生FGC的原因,Old区内存不够了,然而jvm配置了足够大的堆内存。用jmap –heap pid,查看了一下内存分配的情况。发现jvm默认分配给Eden区只有256Mbs0s1区只有32Mb




2.      回顾一下发生YGC时,会将没有回收的对象S0+eden -> S1,默认设置新生代很小,导致S1装不下由S0+eden复制而来的对象,会直接放入老年代内存,导致Old内存迅速增长。现象与猜想是否正确呢,jvm调优来验证一下。调整为:-XX:NewRatio=3 -XX:SurvivorRatio=8-XX:+CMSClassUnloadingEnabled-Xmx4096m -Xms4096m -XX:+UseConcMarkSweepGC


3.      一时心急,把年轻代设置放在了最前面,结果服务启动报错,Too small  for new size specified。调整一下位置:-XX:+CMSClassUnloadingEnabled-Xmx4096m -Xms4096m -XX:NewRatio=3  -XX:SurvivorRatio=8-XX:+UseConcMarkSweepGC


4.      查看一下此时内存分配。压测结果稳定,没有再出现FullGC的情况。




案例三:Tomcat大量线程阻塞

【问题描述】

现象:一发布接口,并发10路,运行一分钟多,接口开始一直失败,LR显示超时,如下图:




【分析过程】

  1. 1.      使用Jstack导出线程快照,用IBM一个线程分析工具查看,发现有大量线程在等待,如下图:



  1. 2.      查看详细的线程信息发现处于blocked状态的都在争同一个资源,而且就是状态runnable锁住的资源。并且与hbase有关。如下图:






  1. 3.      与开发沟通后,怀疑定义了一个全局变量(hbase客户端初始化)导致的。改成每个线程都去初始化一个实例。




  1. 4.      修改后重新测试,没有出现超时失败问题。

通过这些案例,相信大家已对性能分析和调优的套路有所领略,对性能测试的魅力也有所感触,更多分享,敬请期待。



  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程从基础讲起,全课程以实战为主,每个知识点通过实际案例演练讲解理论+实践结合,更容易理解,适合小白,低门槛,快速上手。 课程同时涵盖web端和移动端app测试,同时还加入了抓包工具的使用; 1) 第一阶段为JMETER 5.4.1 (最新版本)工具使用篇,通过Jmeter 介绍和安装、http 取样器、JDBC 取样器、JMETER 组件详细讲解、配置元件、三种参数化方式教你玩转JMETER 参数化、工作过程中间所需的常用函数、聚合报告、察看结果树、汇总报告等监听器知识,后置处理器、后置处理器之正则表达式提取器提取响应内容实践、读取本地JSON格式文件实例、正则表达式操作符、正则表达式工具之Regextester,系统全面学习正则表达式,突破JMETER 知识难点,响应断言、JMETER分布式、分布式原理、搭建JMETER 分布式、WebService协议接口测试。 每一个知识点采用理论加案例的方式,吃透每一个知识点,为性能测试实践奠定基础。 2) 第二阶段为性能测试实践篇1、通过JMETER 实践爬虫技术,爬取第三方平台全网页地址、批量爬取国外网站壁纸10W+图片并保存到本地;2、详细介绍Fiddler 抓包工具,Fiddler 抓包工具原理、Fiddler 抓取PC 端和移动端包信息、JMETER+Fiddler 结合使用对PC 端项目进行性能测试项目实践,提升PC 端性能测试能力;3、JMETER+Fiddler  结合使用对app 项目进行性能测试项目实践,提升app项目性能测试能力4、性能测试常见的业务指标和技术指标、响应时间、TPS、HPS等知识进行讲解5、通过JMETER 对移动端项目进行性能测试实战; 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值