如果你想从头学习Jmeter,可以看看这个系列的文章哦

https://www.cnblogs.com/poloyy/category/1746599.html

Concurrency Thread Group的介绍

  • Concurrency Thread Group提供了用于配置多个线程计划的简化方法
  • 该线程组目的是为了保持并发水平,意味着如果并发线程不够,则在运行线程中启动额外的线程
  • 和Standard Thread Group不同,它不会预先创建所有线程,因此不会使用额外的内存
  • 对于上篇讲到的Stepping Thread Group来说,Concurrency Thread Group是个更好的选择,因为它允许线程优雅地完成其工作
  • Concurrency Thread Group提供了更好的用户行为模拟,因为它使您可以更轻松地控制测试的时间,并创建替换线程以防线程在过程中完成

Concurrency Thread Group参数讲解

  • Target Concurrency:目标并发(线程数)
  • Ramp Up Time:启动时间;若设置 1 min,则目标线程在1 imn内全部启动
  • Ramp-Up Steps Count:阶梯次数;若设置 6 ,则目标线程在 1min 内分六次阶梯加压(启动线程);每次启动的线程数 = 目标线程数 / 阶梯次数 = 60 / 6 = 10
  • Hold Target Rate Time:持续负载运行时间;若设置 6 ,则启动完所有线程后,持续负载运行 2 min,然后再结束
  • Time Unit:时间单位(分钟或者秒)
  • Thread Iterations Limit:线程迭代次数限制(循环次数);默认为空,理解成永远,如果运行时间到达Ramp Up Time + Hold Target Rate Time,则停止运行线程【不建议设置该值】
  • Log Threads Status into File:将线程状态记录到文件中(将线程启动和线程停止事件保存为日志文件);

特别注意点

  • Target Concurrency只是个期望值,实际不一定可以达到这个并发数,得看上面的配置【电脑性能、网络、内存、CPU等因素都会影响最终并发线程数】
  • Jmeter会根据Target Concurrency的值和当前处于活动状态的线程数来判断当前并发线程数是否达到了Target Concurrency;若没有,则会不断线程,尽力让并发线程数达到Target Concurrency的值

Concurrency Thread Group和Stepping Thread Group的区别

  • 并发线程组不提供设置启动延迟时间,阶梯增压过渡时间,阶梯释放过渡时间,但阶梯线程组提供
  • Stepping Thread Group可以阶梯释放线程,而Concurrency Thread Group是瞬时释放(具体看下面介绍)
  • Stepping Thread Group设置了需要启动多少个线程就会严格执行,Concurrency Thread Group会尽力启动线程达到Target Concurrency值

Concurrency Thread Group + Active Threads Over Time

第一个关注点:阶梯增压过程

看Concurrency Thread Group负载预览图每次阶梯增压都是瞬时增压的,但是实际测试结果可以看到它也是有一个过渡期,并不是瞬时增压

第二个关注点:持续负载运行结束后,所有线程瞬时释放

  • 从图最后可以看到,所有线程都是瞬时释放的
  • 普通的线程组有三种状态:启动、运行、释放;而Concurrency Thread Group的线程可以理解成只有两种状态:启动、运行;因为线程都在极短的时间内就结束了

Concurrency Thread Group特殊情况

上图可以看到,活跃状态的线程上下波动的很厉害

大致原因

受环境稳定性影响,如电脑网络、内存、CPU;活跃线程数会有波动

如何解决

遇到这种情况可以多调试几次,看看情况如何

结论

  • 其实有波动是正常的,我们没必要纠结
  • 我们要重点注意的是TPS
  • 线程组的负载只是压力值,我们要测的是服务端的性能,需要关注的是服务端的TPS

Concurrency Thread Group的扩展

  • 当Concurrency Thread Group与Throughput Shaping Timer(吞吐量计时器)一起使用时,可以用tstFeedback 函数的调用来动态维护实现目标RPS所需的线程数
  • 使用此方法时, 需要将Ramp Up Time 和 Ramp-Up Steps Count 置空
  • 但要确保 Hold Target Rate Time ≥ Throughput Shaping Timer 时间表中指定的总持续时间值(Duration)

(后续实际用到的时候再补充吧)

Jmeter系列(11)- 并发线程组Concurrency Thread Group详解的更多相关文章

  1. Jmeter系列(10)- 阶梯加压线程组Stepping Thread Group详解

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 Stepping Thread ...

  2. Java线程创建形式 Thread构造详解 多线程中篇(五)

    Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...

  3. Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)

    1.简介 之前分享的所有文章都是只有一个线程组,而且参数的传递也只在一个线程组中,那么如果需要在两个线程组中传递参数,我们怎么做呢?宏哥今天就给小伙伴或者童鞋们讲解一下,如何实现在线程组之间传递参数. ...

  4. Jmeter系列(8)- test plam测试计划参数详解

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 先了解下测试计划的作用:http ...

  5. Java并发——线程同步Volatile与Synchronized详解

    0. 前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52370068 面试时很可能遇到这样一个问题:使用volatile修饰in ...

  6. JMeter Concurrency Thread Group阶梯式加压

    初始使用,做了下总结 1.首先下载Concurrency Thread Group并发线程组插件,选择或者搜索Custom Thread Groups: 下载完成之后,JMeter会自动重启. 2.在 ...

  7. Jmeter学习笔记(二十一)——Concurrency Thread Group阶梯式加压测试

    一.先安装jmeter的插件管理工具 1.下载地址:jmeter-plugins.org 点击plugins-manager.jar下载. 2.安装 把下载下来的文件plugins-manager.j ...

  8. JMeter 阶梯式加压测试插件 Concurrency Thread Group

    jmeter阶梯式加压测试:JMeter 阶梯式加压测试插件 Stepping Thread Group 由于Stepping Thread Group插件相对来说过于老旧,已不被官方所推荐. 所以这 ...

  9. 【jmeter学习】Concurrency Thread Group阶梯式加压测试

    安装步骤 1.配置Concurrency Thread Group线程组 下载jmeter插件管理:https://jmeter-plugins.org/install/Install/ 2.配置插件 ...

随机推荐

  1. ajax ★ ★ ★ ★ ★

    ajax 1   定义:  是创建交互式应用的网页交互技术 2    特点:无刷新.异步 3  中介数据类型: 1)  XML - 可扩展的标记语言                          ...

  2. api接口安全

    API接口安全 在做app开发中,如何保证api的接口安全,不被其他app去调用? 接口安全的措施很多,今天记录一个常用的措施 签名: 前台想要调用接口,需要使用几个参数生成签名: 时间戳:当前时间 ...

  3. Python 开发工具链全解

    可能刚开始学习Python时,有人跟你说可以将源文件所在的文件夹添加到 PYTHONPATH环境变量中,然后可以从其他位置导入此代码.在大多数情况下,这个人常常忘记补充这是一个非常糟糕的主意.有些人在 ...

  4. 模糊字符串匹配:FuzzyWuzzy

    FuzzyWuzzy 模糊字符串匹配,它使用Levenshtein Distance来计算简单易用的包中序列之间的差异. 前置条件 Python 2.7 or higher difflib pytho ...

  5. pytorch 中模型的保存与加载,增量训练

     让模型接着上次保存好的模型训练,模型加载 #实例化模型.优化器.损失函数 model = MnistModel().to(config.device) optimizer = optim.Adam( ...

  6. Spring基于注解@Required配置

    基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...

  7. 关于JavaEE中Spring模块的学习!

    七大模块,如下: 1. Spring Core: Core封装包是框架的最基础部分,提供IOC和依赖注入特性.这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性 ...

  8. Linux下jdk的安装和环境变量的配置

    Linux下jdk的安装和环境变量的配置 一.jdk的下载 方式一:在官网下载 http://www.oracle.com/technetwork/java/javase/downloads/inde ...

  9. tp5--路由的使用方法(深入)

    懒得写注释,直接上代码 配置文件Route: <?php use think\Route; //tp5路由测试 //动态注册 //Route::rule('路由表达式','路由地址','请求类型 ...

  10. JQ获取select上的option的data-start和data-id

    来源:https://zhidao.baidu.com/question/692142321436883524.html 静态的写法: 用jq的attr()函数,如: HTML: <select ...