JMeter之If Controller深究二
1.背景
接上文JMeter之If Controller深究一,在上文中提到压测采用的是JMeter3.1版本,本篇继续深究。基本确定问题原因后,宝路这边又做了不同版本的JMeter对比实验,这次加入了自己常用的5.1.1版本(目前官方最版版本5.2.1)。
2.实战
压测机器配置(台式机):

测试脚本一:

测试脚本二:

两个脚本的唯一区别就是其中一个脚本采用了if逻辑控制器

- JMeter3.1测试结果(测试脚本一):
TPS曲线图(100vu):

RT曲线图(100vu):

从TPS、RT图看出,100vu下曲线都非常平稳,此时压力机CPU消耗约7%,宝路这边还做了100vu下其他RT(可在脚本设置)的压测,测试结果是一样的,由于篇幅有限就不贴图了。
- JMeter3.1测试结果(测试脚本二):
TPS曲线图(100vu):

RT曲线图(100vu):

恩,从图就可以看出TPS、RT曲线波动非常明显,压测过程中压力机CPU消耗约50%,较第一次高了约43%。此次执行的脚本与“测试脚本一”就多了一个if逻辑控制器而已,其余配置均一样。
咱们继续实验,将上面的JMeter换成5.1.1进行相同场景压测。
- JMeter5.1.1测试结果(测试脚本一):
TPS曲线图(100vu):

RT曲线图:

从图可以看出,压测脚本一(不带if逻辑控制器),JMeter5.1.1 与 JMeter3.1 压测结果几乎一致。
- JMeter5.1.1测试结果(测试脚本二):
TPS曲线图:

RT曲线图:

恩?有点意思。。。。压测脚本二(带if逻辑控制器)JMeter5.1.1测出的结果可以分析出TPS与RT关系明显不正常, 再看看JMeter3.1测试出的结果也不稳定。
此时,只有去分析源码了,看过源码还真是发现了问题:宝路对比了5.1.1与JMeter3.1的源码发现主要区别:
JMeter3.1

JMeter5.1.1

从上图可以看出:3.1中的USE_RHINO_ENGINE默认值是true,而5.1.1中默认是false。
宝路在jmeter.properties找到了javascript.use_rhino属性:

将javascript.use_rhino属性改成false,对JMeter3.1测试结果(测试脚本二)进行了复测:
TPS曲线图:

RT曲线图:

这就与JMeter5.1.1测试结果(测试脚本二)相吻合佐证了jmeter.properties中官方对javascript.use_rhino注释。那么Rhino跟Nashorn 有啥区别呢?
Nashorn 一个 javascript 引擎。从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。它使用基于JSR 292的新语言特性,其中包含在JDK 7中引入的 invokedynamic,将JavaScript编译成Java字节码,与先前的Rhino实现相比,这带来了2到10倍的性能提升。
性能测试脚本不建议搞的太复杂,这样会较少不要的性能开销。从压测结果也能看出:仅仅是加了一个if逻辑控制器,压力机的CPU消耗翻了7倍。比较简单做法的就是sampler加响应断言,对于前后交易依赖性比较强的交易,如果前交易失败了,可以直接跳出本次迭代,进行下次迭代。
从性能实验结果还能看出,即使采用了Nashorn引擎,性能照样存在一定问题(可以理解成bug),所以不建议使用。
有的同学可能又说了,我的测试场景涉及交易就是比较复杂,如果脚本设计的不够强壮,压测过程中错误信息不容易定位。这个确实是个问题,宝路也遇到了,在JMeter之If Controller深究一中所提及的问题,其实不光if 逻辑控制器这个一个问题。脚本中每个sampler 都用了JSR223后置处理器来获取返回报文,再截取返回报文关键域做断言。
嗯?JSR223后置处理器这有啥问题呢。。。。高并发下,非常容易PermSize内存溢出。
有时候,脚本搞的过于复杂也不会什么好事。。。。那就没有解决方案了么?其实是有的,那就是自己写jar包,但好些同学一提到这个,内心其实是抗拒的,或者觉得自己不行。
JMeter之If Controller深究二的更多相关文章
- JMeter之If Controller深究一
1.背景 大家最近还好么,截止目前新型冠状病毒累计确诊病例已超7万4千多例,希望大家无论是在家办公还是单位办公,一定要注意自我防护.今天跟大家分享一下,最近一次真实生产压测遇到的问题,如题:if co ...
- jmeter之Throughput Controller
jmeter之Throughput Controller Throughput Controller 这个控制器的命名不准确,因为它不是用来控制吞吐量的.吞吐量控制器允许用户控制执行频率,jmeter ...
- 一张图搞定OAuth2.0 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上 彻底关闭Excle进程的几个方法 (七)Net Core项目使用Controller之二
一张图搞定OAuth2.0 目录 1.引言 2.OAuth2.0是什么 3.OAuth2.0怎么写 回到顶部 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常 ...
- 【转载】Jmeter之Bean shell使用(二)
Jmeter之Bean shell使用(二) 原博文地址为:https://www.cnblogs.com/puresoul/p/4949889.html 其中需要注意的是——三.自定义函数中Bean ...
- jmeter 逻辑控制器Logic Controller详解
Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...
- 转 Jmeter之Bean shell使用(二)
上一篇Jmeter之Bean shell使用(一)简单介绍了下Jmeter中的Bean shell,本文是对上文的一个补充,主要总结下常用的几种场景和方法,相信这些基本可以涵盖大部分的需求.本节内容如 ...
- Jmeter之Bean shell使用(二)
上一篇Jmeter之Bean shell使用(一)简单介绍了下Jmeter中的Bean shell,本文是对上文的一个补充,主要总结下常用的几种场景和方法,相信这些基本可以涵盖大部分的需求.本节内容如 ...
- Jmeter分布式测试搭建(二)
Jmeter运行的时候十分耗内存和cpu,跑到500多个进程的时候,就卡死了.我们测试时,如果进行大数据量的并发测试时,单个电脑的CPU和内存可能无法承受,这个时候,我们需要进行一个分布式的测试,比如 ...
- JMeter学习(三十二)属性和变量
一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...
随机推荐
- Redis系列之----Redis的过期设置及淘汰策略
Redis的过期时间机制和内存淘汰策略 Redis的数据是存储在内存中的,而服务器的内存大小是有限制的,除非宕机,否则这些数据会一直存在,对于一些不再使用的key,也应当进行删除,否则会浪费内存 ...
- .Net Core Web Api实践(四)填坑连接Redis时Timeout performing EVAL
前言:前两篇文章.net core+Redis+IIS+nginx实现Session共享中,介绍了使用Microsoft.Extensions.Caching.Redis实现Session共享的方法, ...
- cogs 397. [USACO Oct09] 热浪 Dijkstra
397. [USACO Oct09] 热浪 ★☆ 输入文件:heatwvx.in 输出文件:heatwvx.out 简单对比时间限制:1 s 内存限制:128 MB 德克薩斯純樸的民眾 ...
- 数字金字塔 动态规划(优化版) USACO 一维dp压缩版
1016: 1.5.1 Number Triangles 数字金字塔 时间限制: 1 Sec 内存限制: 128 MB提交: 9 解决: 8[提交] [状态] [讨论版] [命题人:外部导入] 题 ...
- 区间dp - codeforces
题意 : 给你 n 个数字,相邻的数字如果相同,则代表他们是一个块的,每次操作可以将一个块的数字变成任意一种数字,求最小操作次数,将整个区间的所有数字变成相同的 思路分析 : 定义 dp[i][j][ ...
- 字符串分类 - hash
链接:https://www.nowcoder.com/acm/contest/141/E来源:牛客网 题目描述 Eddy likes to play with string which is a s ...
- day6 云道页面 知识点梳理(1)
关于块级元素.行内元素.行内块元素的梳理 (1)块级元素 特点: a.可以设置宽高,行高,外边距和内边距 b.块级元素会独占一行 c.宽度默认是容器的100% d.可以容纳内联元素 ...
- MySQL 排名、分组后组内排名、取各组的前几名
一.排名 /*普通排名:从1开始,顺序往下排*/ AS rank ) r ORDER BY score; /*并列排名:相同的值是相同的排名*/ SELECT cs.* , CASE WHEN @p= ...
- javaweb-codereview 学习记录-1
Servlet是在Java Web容器上运行的小程序,通常我们用Servlet来处理一些较为复杂的服务器端的业务逻辑.值得注意的是在Servlet3.0之后(Tomcat7+)可以使用注解方式配置Se ...
- Eclipse CDT 插件修改自动补全
eclipse CDT 2019-06代码补全插件 本自动补全文件已在2019-06至2019-09平台上做过测试,均已完美通过功能检测 在原来Eclipse工具补全的基础上新增26个英文字符和&qu ...