场景:

大家在使用Jmeter测试的时候应该发现了,

(1)线程启动了就会直接发送测试请求;--如果要模拟在一瞬间高并发量测试的时候,需要调高线程数量,这很耗测试机器的性能,往往无法支持较大的并发数,无法控制每次测试的瞬间并发量;

(2)如果使用了constant throughput timer,可以模拟较长时间的并发测试,但是仍无法满足稳定的瞬间高并发测试;

解决:

1、使用集合点;

作用:阻塞线程,直到指定的线程数量到达后,再一起释放,可以瞬间产生很大的压力。

引用虫师的话“红军排长说:等一等!集结了所有战友后,大家再一起冲啊!这样给敌人的压力是最大的。”

操作步骤

1、添加集合点,在Jmeter里是synchronized timer;

2、面板说明及设置

(1)面板说明

1)名称:自定义名称

2)Number of Simulated Users to Group by

Define how many simulated users trigger the release of the synchronizing block(default value of '0'means all users).

即a.每集合够多少个模拟用户(线程)后发送一次测试请求;

b.如果设置为0,等同于设置为线程租中的线程数;

c.确保设置的值不大于它所在线程组包含的用户数(线程数)-- 一直集结线程而不发出测试请求,直到超时(如果设置了的话)。

例子说明:“Number of Simulated Users to Group by: 5”表示并发量是5。也就是说,Jmeter会等到5个线程都运行到此处时,这五个线程才开始执行后面的操作,先到达的线程将会在此等候。

3)Timeout in milliseconds

If set to 0,no timeout will occur;if superior to 0,then if after the timeout interval the number of users waiting is not reached,timer will stop waiting.

即a.超时时间,即多少毫秒后同时释放已集结的的线程,发送测试请求;

b.如果设置为0,Timer将等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。

(2)设置

我们这里设置Number of Simulated Users to Group by :10

Timeout in milliseconds :500

3、设置线程组属性

因为现在是使用集合点来实现高并发测试,所以现在线程组属性中就可以设置线程在较长的时间来启动,这样测试机器的压力就会相对小一点;

4、添加相关请求,结果树等,运行查看效果

通过结果树可以看到,请求是批量执行的;

1)开始执行的脚本,观察请求的增加数量趋势;或

2)对比请求的发送时间;

5、其他实践

(1)实践1--synchronizing timer应用于多个sampler中的其中一个

如果希望定时器仅应用于其中一个sampler,则把该定时器作为子节点加入,如下图

定时器仅仅对其上的HTTP请求1起作用,即仅在HTTP请求1执行前执行定时器,和HTTP请求2无关。

(2)实践2--synchronizing timer应用于多个sampler

如下,执行HTTP请求1和HTTP请求2前都会执行同步定时器1、2。当执行一个sampler之前时,和sampler处于相同作用域的定时器都会被执行;

注意点

1、网上部分人说“集合点的位置一定要在Sample(采样器)之前才能生效。”

此言差矣,在Jmeter中,timer是在sampler之前执行的。不管这个定时器的位置放在sampler之后,还是之前。当然,如果有多个timer的时候,在相同作用域下,会按上下顺序执行timer,这个就需要慎重放置timer的顺序;

不过,为了更好的可读性,还是建议将timer放在对应的sampler前面 或 子节点中;

2、Synchronizing timer 仅作用于同一个JVM中的线程。

所以,如果使用并发测试,确保"Number of Simultaneous Users to Group by"中设置的值不大于它所在线程组包含的用户数。

(原文:Synchronizing timer blocks only within one JVM, so if using Distributed testing ensure you never set "Number of Simultaneous Users to Group by" to a value superior to the number of users of its containing Thread group considering 1 injector only)

试想:

a.如果分布式测试时,synchronizing timer作用于所有jvm,那么jvm之间或者说监控jvm工作的部件就需要频繁通讯,确定线程的数量及状态等,然后集结了足够的线程后,又要发送信号让Jmeter来发送测试请求,中间存在延时,这样就无法模拟更真实的高并发了,而且这个东西还会消耗测试机器的一部分性能,会给测试结果带来负面影响;

所以暂时是只支持控制单个jvm,如果后面有办法解决上面那些问题后,就可以实现控制多个jvm,控制总并发量;

b.如果分布式测试,并使用了Synchronizing timer,且设置的值是小于单个jvm的线程数量;

但是,较难确保所有jvm都在同一时间点集结了同样数量的线程数,这样就很难下测试结论了,因为都不知道是多少并发下的性能表现;当然了,可以将线程的启用时间拉长,并将超时时间延长,这样就很可能会与同一时刻集结到足够的线程,达到超高并发的测试;

所以,分布式测试与Synchronizing timer一般不是同时使用的;如果非要用,则需要慎重设置相关参数;

3、如果设置Timeout in milliseconds为0,且线程数量无法达到"Number of Simultaneous Users to Group by"中设置的值,那么Test将无限等待,除非手动终止。

这个无法达到的情况有如下几种:

a.设置的值大于线程数量,这样就永远无法达到了;

b.最后一批线程数不够集合点数目;

Jmeter之仿真高并发测试-集合点的更多相关文章

  1. Java高并发测试框架JCStress

    前言 如果要研究高并发,一般会借助高并发工具来进行测试.JCStress(Java Concurrency Stress)它是OpenJDK中的一个高并发测试工具,它可以帮助我们研究在高并发场景下JV ...

  2. JMeter入门 | 第一个并发测试

    JMeter入门 | 第一个并发测试 背景 近期我们组新来了一些新同事,之前从来没有用过JMeter做个并发测试,于是准备了一系列小教程去指引新同事,本章主要是新人入门体验教程,快速实现第一个接口并发 ...

  3. springboot2.0+线程池+Jmeter以模拟高并发

    声明:原创在这里https://blog.csdn.net/u011677147/article/details/80271174,在此也谢谢哥们. 1.目录结构 2.BusinessThread.j ...

  4. 对redis高并发测试的研究

    以下引用大神的: 测试项目: https://github.com/14251104246/redis-demo.git 准备 使用docker-compose命令启动redis服务器(可以用其他方式 ...

  5. java高并发测试代码

    package com.example.test; import java.net.URL;import java.net.URLConnection;import java.util.concurr ...

  6. CountDownLatch模拟高并发测试代码

    直接上代码进行验证吧 /** * 通过countdownlatch的机制,来实现并发运行 * 模拟200个并发测试 * @author ll * @date 2018年4月18日 下午3:55:59 ...

  7. jmeter(高并发测试)

    1.首先jmeter需要JDK8以上得运行环境 2.下载jmeter,官方网址:http://jmeter.apache.org/download_jmeter.cgi 3.安装jmeter.jmet ...

  8. http_load 高并发测试

    安装http_load 下载 sudo wget http://www.acme.com/software/http_load/http_load-09Mar2016.tar.gz 解压 sudo t ...

  9. webbench高并发测试

    安装ctags sudo apt-get install ctags 安装webbench 下载webbench http://home.tiscali.cz/~cz210552/distfiles/ ...

随机推荐

  1. LDA模型笔记

    “LDA(Latent Dirichlet Allocation)模型,模型主要解决文档处理领域的问题,比如文章主题分类.文章检测.相似度分析.文本分段和文档检索等问题.LDA主题模型是一个三层贝叶斯 ...

  2. MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图

    一:背景 1. 讲故事 最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看样子这些年sqlserver没落了,已经后继无人了,再写sqlser ...

  3. jchdl - GSL实例:FullAdder

    https://mp.weixin.qq.com/s/CtT08xZON0YxnheqDM2FAw 全加器是能够计算低位进位的二进制加法电路.与半加器相比,全加器不只考虑本位计算结果是否有进位,也考虑 ...

  4. 跨域解决方案 - JSONP

    目录 1. 定义 2. JSONP 解决跨域 3. 应用场景 4. 代码演示 1. 定义 在HTML 中, script 标签有两个个性质: script 标签可以不受同源策略的限制去访问服务器资源, ...

  5. Java实现 LeetCode 789 逃脱阻碍者(曼哈顿距离)

    789. 逃脱阻碍者 你在进行一个简化版的吃豆人游戏.你从 (0, 0) 点开始出发,你的目的地是 (target[0], target[1]) .地图上有一些阻碍者,第 i 个阻碍者从 (ghost ...

  6. Java实现蓝桥杯 九宫幻方

    九宫幻方 D: 今天做一道题目 九宫幻方 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分. 三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对 ...

  7. Java实现蓝桥杯二项式的系数规律

    二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学家杨辉1261年所著的<详解九章算法>一书里就出现了. 其排列规律: 1 1 1 2 1 3 3 1 4 6 4 ...

  8. Java实现 蓝桥杯 历届试题 最大子阵

    问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大. 其中,A的子矩阵指在A中行和列均连续的一块. 输入格式 输入的第一行包含两个整数n, m,分别表示矩阵A的行数和 ...

  9. Java实现第九届蓝桥杯付账问题

    付账问题 题目描述 [题目描述] 几个人一起出去吃饭是常有的事.但在结帐的时候,常常会出现一些争执. 现在有 n 个人出去吃饭,他们总共消费了 S 元.其中第 i 个人带了 ai 元.幸运的是,所有人 ...

  10. JavaScript如何调用Python后端服务

    本篇文章旨在通过一段JavaScript来演示如何调用python后端服务的,这是我开发的一个构建测试数据的工具. 第一部分:html 代码部分 第二部分:JavaScript代码部分 第三部分:Py ...