如果你想从头学习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)

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

最新文章

  1. angularJS实用的开发技巧
  2. Android的消息循环机制 Looper Handler类分析
  3. 使用VNC登录Linux
  4. Java基础(57):Eclipse中环境配置(视图字体颜色行号调试快捷键等等)
  5. JAVA赋值运算符
  6. (转)Arcgis API常用接口调用方法
  7. Codeigniter夸应用调用model
  8. 关于MATLAB中的tic toc的问题
  9. App小样在手机运行了一下
  10. java学习之反射机制
  11. oracle 关于动态执行语句 execute immediate 的用法
  12. (转)VS无法启动调试:“生成下面的模块时,启用了优化或没有调试信息“
  13. 整理js继承
  14. c#params应用
  15. C语言中%d,%p,%u,%lu等都有什么用处
  16. codeforces 13 b
  17. Kali学习笔记43:SQL盲注
  18. [Android] Android 用于异步加载 ContentProvider 中的内容的机制 -- Loader 机制 (LoaderManager + CursorLoader + LoaderManager.LoaderCallbacks)
  19. 使用openssl在windows 10下本地xampp配置https开发环境
  20. Http协议中常用字段总结(不定时完善中)

热门文章

  1. AJ学IOS(47)之网易彩票帮助界面UIWebView的运用
  2. d3.js v4曲线图的拖拽功能实现Zoom
  3. three.js - 一个javascript 3D代码库
  4. MDC是什么鬼?用法、源码一锅端
  5. Python程序设计 实验 1 熟悉 IDLE 和在线编程平台
  6. J - Recommendations CodeForces - 1315D
  7. [linux][MongoDB] mongodb学习(一):MongoDB安装、管理工具、
  8. 新手想掌握Python技能需要众多Python项目练习,适合项目有哪些?
  9. .Net Core主机配置
  10. tensorflow1.0 lstm学习曲线