JMeter测试并发场景,是通过设置Synchronizing Timer(同步定时器),熟悉LoadRunner性能测试的话,就知道里面有个概念:集合点。

Synchronizing Timer则可以理解为集合点的作用。

Synchronizing Timer的设置策略很简单:

  • Number of Simulated Users to Group by:意思是按组模拟用户数,也就是设置组的用户数(并发数),当线程组Thread Strated达到该值时,同步执行请求。默认为0,即当前线程组的所有线程数。
  • Timeout in milliseconds:超时时间(单位:毫秒),组在超时时间后达不到设置的线程数时,会丢弃继续请求,释放已达到的线程。默认为0,即无超时限制,会一直等待。

下面以一张图,理解Synchronizing Timer:

假设存在这样的一个场景:一个线程组有3个线程,Ramp-Up Period为30s,循环次数为1(可忽略,因为不影响请求)。

为线程组添加一个默认的集合点,即使Number of Simulated Users to Group by和Timeout in milliseconds都为0。

那么由Log Viewer跟踪分析,运行结果图:

第1个线程,在点击运行时就启动(Thread strated:Thread Group 1-1),但未运行(即没有发送HTTP请求),然后等到第10s,第2个线程马上启动(Thread strated:Thread Group 1-2),然后等到第20s时,马上启动第3个线程(Thread strated:Thread Group 1-3),接着线程Thread Group 1-1、Thread Group 1-2、Thread Group 1-3在第20s同时运行.....在接下来的运行时间里,无论什么时候有其中一个线程运行失败,则会无期限地等待.....这就会带来运行卡住的问题。

问题来了,如果设置Synchronizing Timer的运行策略,即能保证性能测试正常执行,又能真实的反映性能结果?

我们必须保证对Synchronizing Timer的设置有效且有意义:

1.对Number of Simulated Users to Group by有效设置:

并发用户数<=总线程数

2.Timeout in milliseconds有效设置:

超时公式:并发线程数* Ramp-Up Periond(in seconds)/总线程数

当并发线程数=总线程数时,则超时时间等于Ramp-Up Periond(in seconds)

但,当超时时间<并发线程数*Ramp-Up Periond(in seconds)/总线程数 时,启动执行,则会一直提示:“WARN  - jmeter.timers.SyncTimer: SyncTimer Synchronizing Timer timeouted waiting for users after:10ms”,此时的设置会影响性能结果,如图:

结论:

JMeter通过添加Synchronizing Timer(同步定时器)来实现线程并发,Synchronizing Timer的设置策略中要保证Synchronizing Timer的设置有效且有意义,那么要设置并发用户数<=总线程数,且超时时间设置>=并发线程数*Ramp-Up Periond(in seconds)/总线程数。

JMeter 之Synchronizing Timer运行原理的更多相关文章

  1. Jmeter结构体系及运行原理

    Jmeter结构体系 把Jmeter的结构体系拆分为三维空间,如图: X1~X5:是负载模拟的一个过程,使用这些组件来完成负载的模拟: X1:选择协议,模拟用户请求,检查服务器响应是否正确,然后收集结 ...

  2. Jmeter之Synchronizing Timer(同步集合点)

    在性能测试时,需要压测并发,此时就需要用到Synchronizing Timer组件. 一.界面显示 二.配置说明 1.名称:标识 2.注释:备注 3.Grouping (1.Number of si ...

  3. Jmeter资源监控工具ServerAgent运行原理的一些研究

    用过Jmeter的应该都了解,有个ServerAgent工具,放在linux或者windows服务器上开启服务后,在Jmeter中配置下监视器,就可以抓取到服务器的一些资源信息,抓取的主要是cpu.内 ...

  4. Jmeter组成结构及运行原理

    Jmeter结构主要组成要素包括:测试计划,线程组,采样器以及监听器.对于各部件的作用域关系如下图: Jmeter是纯Java程序,使用JVM,运行采用多线程完成,往往单台负载机由于机器配置有限,支持 ...

  5. jmeter之Synchronizing Timer的理解

    该功能类似loadrunner的集合点,一般按照jmeter的树形结构,放在需要设置集合点的请求之前,两个参数的意思,我们先看官网的解释: 大概意思就是: Number of Simulated Us ...

  6. JMeter学习-021-JMeter 定时器(Synchronizing Timer)之集合点应用

    性能测试中我们经常提到一个概念就是“并发”,其实在实际真实的性能测试中是不存在真正的并发的.为了更真实的模拟对一个请求的并发测试场景,我们通常设置一个集合点,JMeter中提供了这样的一个功能设置. ...

  7. Jmeter之集合点(Synchronizing timer 同步定时器)

    1.集合点介绍 LR中集合点可以设置多个虚拟用户等待到一个点,同时触发一个事务,以达到模拟真实环境下多个用户同时操作,实现性能测试的最终目的.jmeter中使用Synchronizing Timer实 ...

  8. jmeter集合点使用方法:Synchronizing Timer

    LR中集合点可以设置多个虚拟用户等待到一个点,同时触发一个事务,以达到模拟真实环境下多个用户同时操作,实现性能测试的最终目的. jmeter中使用Synchronizing Timer实现Lr中集合点 ...

  9. 【Jmeter】集合点Synchronizing Timer

    集合点: 简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,每到输入用户名和密码登录时,所有的虚拟 ...

随机推荐

  1. 使用SQL语句使数据从坚向排列转化成横向排列(排班表)

    知识重点: 1.extract(day from schedule01::timestamp)=13 Extract 属于 SQL 的 DML(即数据库管理语言)函数,同样,InterBase 也支持 ...

  2. 初始化CSS

    为什么要初始化CSS? 建站老手都知道,这是为了考虑到浏览器的兼容问题,其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异.当然,初始化样式会对SEO有一定的 ...

  3. Bash启动选项

    Bash选项可以用来控制它的行为,有两种选项:单字符选项和多字符选项,多字符选项必须出现在单字符选项以前.1)单字符选项:由一个减号和一个字符组成2)多字符选项:由两个减号和多个字符组成 常用选项:- ...

  4. MVC中控制器当中需要绑定SelectList,也就是所谓的DropDownList

    ViewData["moduleList"] = new SelectList(new El_Basic_ModuleInfo().Rows().AsEnumerable(), & ...

  5. BigDecimal四舍五入使用总结

    //BigDecimal四舍五入double f1 = new BigDecimal(1).setScale(2,RoundingMode.HALF_UP).doubleValue();//转化成字符 ...

  6. java——国际化详解

    深入理解Java国际化 假设我们正在开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面--这便是典型 ...

  7. jquery获取当前选项的属性值a

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  8. 【LeetCode】110. Balanced Binary Tree

    题目: Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bin ...

  9. 移动端布局,C3新增属性

    <html5拖拽> 1.给元素设置 draggable="true" 属性,这个元素就可以被拖拽了 <拖拽元素事件> 2.ondragstart 拖拽前触发 ...

  10. php生成Excel表格

    //引用新建对象<br>require "../phpexcel/Classes/PHPExcel.php"; $excel = new PHPExcel(); 建表格 ...