JMeter 之Synchronizing Timer运行原理

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)/总线程数。

时间: 2024-10-16 15:38:20

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

Jmeter结构体系及运行原理

Jmeter结构体系 把Jmeter的结构体系拆分为三维空间,如图: X1~X5:是负载模拟的一个过程,使用这些组件来完成负载的模拟: X1:选择协议,模拟用户请求,检查服务器响应是否正确,然后收集结果信息: X2:完善测试脚本部分,包括参数化,关联等: X3:控制测试脚本业务逻辑: X4:集合点,模拟用户并发: X5:用户数,一个线程代表一个用户: Y1:可以理解为选择协议,包含负载模拟部分,负责模拟用户请求: Y2:可以理解为检查点,结果验证部分,负责验证结果正确性: Z:可以理解为监控器,

jmeter之Synchronizing Timer的理解

该功能类似loadrunner的集合点,一般按照jmeter的树形结构,放在需要设置集合点的请求之前,两个参数的意思,我们先看官网的解释: 大概意思就是: Number of Simulated Users to Groupby:每次释放的线程数量.如果设置为0,等于设置为线程租中的线程数量. Timeout in milliseconds:如果设置为0,该定时器将会等待线程数达到了"Number of Simultaneous Users toGroup"中设置的值才释放.如果大于0

jmeter ---集合点使用方法:Synchronizing Timer

LR中集合点可以设置多个虚拟用户等待到一个点,同时触发一个事务,以达到模拟真实环境下多个用户同时操作,实现性能测试的最终目的. jmeter中使用Synchronizing Timer实现Lr中集合点的功能,模拟多用户并发测试,即多个线程在同一时刻并发请求. jmeter中使用集合点的方法:Synchronizing Timer 将测试元件Synchronizing Timer添加到请求之前或某个Sampler的子节点,右键菜单依次选择“添加–>定时器/Timer–>Synchronizing

Jmeter运行原理

Jmeter运行原理: JMETER是运行在JVM虚拟机上的,每个进程的开销比loadrunner的进程开销大,如果以进程的方式来运行每台负载机上的进程数量不会允许太多,当有大量并发时就需要大量的负载机,jmeter选择了以线程方式来运行.jmeter通过线程组来驱动多个线程运行测试脚本对被测服务器发起负载,每一个负载机上都可以运行多个线程组.jemter运行场景不仅可以再gui方式中完成,还可以运行命令行,而且命令行的运行方式对于负载机的资源消耗会更小.Jmeter基本原理是建立一个线程池,多

Java Timer定时器原理

做项目很多时候会用到定时任务,比如在深夜,流量较小的时候,做一些统计工作.早上定时发送邮件,更新数据库等.这里可以用Java的Timer或线程池实现.Timer可以实现,不过Timer存在一些问题.他起一个单线程,如果有异常产生,线程将退出,整个定时任务就失败. 下面是一个Timer实现的定时任务Demo,会向控制台每隔一秒输出Do work... 1 import java.util.Date; 2 import java.util.Timer; 3 import java.util.Time

JavaScript运行原理解析

写在前面的话: 发现使用了那么长时间的Javascript,但是对其运行原理还是不清晰,今天特意总结一下,把大神们的理论和自己的总结都记录到下面: 1. 什么是JavaScript解析引擎? 简单地说,JavaScript解析引擎就是能够"读懂"JavaScript代码,并准确地给出代码运行结果的一段程序.比方说,当你写了 var a = 1 + 1; 这样一段代码,JavaScript引擎做的事情就是看懂(解析)你这段代码,并且将a的值变为2. 学过编译原理的人都知道,对于静态语言来

.NET System.Timers.Timer的原理和使用(开发定时执行程序)

概述(来自MSDN) Timer 组件是基于服务器的计时器,它使您能够指定在应用程序中引发Elapsed 事件的周期性间隔.然后可以操控此事件以提供定期处理.例如,假设您有一台关键性服务器,必须每周7 天.每天24 小时都保持运行.可以创建一个使用Timer 的服务,以定期检查服务器并确保系统开启并在运行.如果系统不响应,则该服务可以尝试重新启动服务器或通知管理员. 基于服务器的Timer 是为在多线程环境中用于辅助线程而设计的.服务器计时器可以在线程间移动来处理引发的Elapsed 事件,这样

Jmeter结构体系及运行顺序

一:jmeter运行原理: jmeter时以线程的方式来运行的(由于jmeter是java开发的所以是运行在JVM虚拟机上的,java也是支持多线程的) 二:jmeter结构体系 1.取样器smapler 用来模拟用户操作,向服务器(被测系统)发出http等请求 2.断言(检查点) 用来验证结果是否正确,用一个预设的结果与实际结果匹配 3.监听器 测试结果需要添加监听器来收集 (1)添加监听器,可以保存结果到文件,结果可以供再次分析使用 (2)展示结果,可以以表格及图形的形式展示结果,方便测试人

虚拟内存运行原理!

                                   虚拟内存运行原理! 在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间.当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用. 在Linux内存管理中,主要是通过"调页Paging"和"交换Swapping"来完成上述的内存调度.调页算法