Jmeter(三十六)纵横并发、限制QPS
一、纵横并发
Jmeter设计并发事件,这应该是一项必备技能。
首先来看并发的概念。
通常在性能测试中会涉及到并发用户数的概念,有关并发用户数(系统用户数)的详解后续再记。
(有关并发、并行的概念参考https://blog.csdn.net/qq_33290787/article/details/51790605)
并发:本质为一个CPU(或多个CPU)在若干道程序(或线程)之间的多路复用。
参考知乎大神的讲法:并发指的是该系统有处理多事务的能力,不一定是同时。
啃了啃虫师的一篇博客http://www.cnblogs.com/fnng/archive/2012/06/25/2562943.html--并发用户。
文中对并发用户做了很详细的解释。其中更是对“真正意义上的并发不存在”一理论进行了很详细的阐述。推荐认真一阅。
那么在Jmeter中是如何进行模拟高仿并发的呢?
有人说了,用集合点,对,集合点确实达到并发目的的一个点。
还有人说了,不用集合点也可以,其实,对后者的观点,本人认为也是正确的,只是在某种意义上,设计该种场景的话要考虑的因素比较多。
废话不多说,先一一来上操作。

线程组加入线程数2,斜坡时间1s,循环一次。
1s启动2个线程。(2个线程并发)
这是一种原始的Jmeter的设计方法。
那么再看一下集合点的设计方法。

定时器-->Synchronizing Timer原件。
看到Synchronizing这个单词是不是有点熟悉。译为同步化。
java中使用synchronized为锁的关键字。那么再看看其帮助文档。
|
The purpose of SycTimeType is to stop threads until X threads are blocked, and they are immediately released. Therefore, synchronous timer can create large immediate load at every point of the test plan.
SycTimeType的目的是阻止线程,直到X个线程被阻塞,然后它们都被立即释放。因此,同步计时器可以在测试计划的各个点创建大的即时负载。(百度翻译)
其目的为阻塞线程,什么意思呢?就好似过桥一样,先在桥头将人挡住,直到人数阻塞到一定数量,释放障碍物,让人一起从桥上通过(速度恒定)
该元件只有两个指标:Number of Simultaneous Users to Group by:每次释放的线程数
Timeout in milliseconds:超时时间,超时时间后达不到设置的线程数时,会丢弃继续请求
逐一翻译一下下方的两段注意语:
#If timeout in milliseconds is set to 0 and number of threads never reaches "Number of Simultaneous Users to Group by" then Test will pause infinitely. Only a forced stop will stop it. Setting Timeout in milliseconds is an option to consider in this case.
如果以毫秒为单位的超时设置为0,并且线程的数量永远达不到“同时分组的用户数”,那么测试将无限地暂停。只有强制停止才能阻止它。在这种情况下,以毫秒为单位设置超时是一个考虑的选项。
#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.
仅在一个JVM内同步计时器块,因此如果使用分布式测试确保从未将“同时用户数”分组为一个值,其值仅考虑其包含1个喷射器的线程组的用户数。
看看效果:

设置Synchronizing Timer

sampler都是以50、50的进行请求。
二、限制QPS
内容来自<软件性能测试案例剖析-第二版-段念>
书中提到了限制QPS的步骤。
用到组件:定时器-->Constant Throughput Timer(恒定吞吐量定时器)
|
GUI界面有两个选项:
1、期望吞吐量
2、以xx为基础控制吞吐量
下拉框选择项:
This thread only :分别控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以线程的数量。
如果我们这里选择此种模式,然后设定了是10个线程,那么我们前面的Target throughput就应该填写1200/10=120 或 20/10*60=120了;
All active threads : 设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
如果我们这里选择此种模式,然后设定了是10个线程,那么我们前面的Target throughput就应该填写1200/10=120 或 20/10*60=120了;
All active threads in current thread group :设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同。
All active threads (shared ):与All active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
All cative threads in current thread group (shared ):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
OK,再加入书中的例子:限制20QPS的情况下,查看其响应时间等信息。
加入网上些许分析:(http://ydhome.blog.51cto.com/8948432/1869970)
1、这里的20 QPS应该是指Jmeter发送请求的QPS,而不是服务器处理的QPS;--因为假如我们以20 QPS的速度向服务器发送请求,但是服务器每秒最多只能处理8个请求,那么我们无论如何都无法测得服务器在20 QPS的情况下的性能数据;
2、难点在于让Jmeter【稳定地】以20 QPS的速度向服务器发送请求;
使用组件Constant Throughput Timer。

因为单位为minute(分钟),因此,需要20*60=1200。
加入listener,进行查看响应时间等信息。
Jmeter(三十六)纵横并发、限制QPS的更多相关文章
- Python之路(第三十六篇)并发编程:进程、同步异步、阻塞非阻塞
一.理论基础 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都是围绕进程的概念展开的. 即使可以利用的cpu只有一个(早期的 ...
- Jmeter(三十六) - 从入门到精通进阶篇 - 设置负载阶梯式压测场景(详解教程)
1.简介 在性能测试中,有时需要模拟一种实际生产中经常出现的情况,即:从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间,然后继续加压达到某个值持续运行,如此循环直到达到预期的峰值,运行一 ...
- Jmeter(三十六)_运行过程中改变负载
顾名思义,jmeter在做性能测试时,可以在不停止脚本的情况下修改负载压力,达到期望的测试效果.我们将通过Constant Throughput Timer(吞吐量计时器)和Beanshell服务器来 ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- NeHe OpenGL教程 第三十六课:从渲染到纹理
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Java进阶(三十六)深入理解Java的接口和抽象类
Java进阶(三十六)深入理解Java的接口和抽象类 前言 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太 ...
- Gradle 1.12用户指南翻译——第三十六章. Sonar Runner 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础
第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
- “全栈2019”Java第三十六章:类
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- 【BZOJ3144】【HNOI2013】切糕
总算做了一道2011以后的省选题了……原题: 图片题面好评! P,Q,R≤40,0≤D≤R,给出的所有的不和谐值不超过1000. 文本样例好评! 恩这个是听妹主席讲过后会写的,首先把每个点拆成链,那么 ...
- 如何取消noarch.rpm包
有一次部署zabbix服务器,不小心rpm -ivh zabbix的el7版本的rpm了,但是我的系统是centos6.5的,所以就尴尬了 rpm -ivh http://repo.zabbix.co ...
- redis服务以及phpredis扩展的安装
一.下载软件包 下载redis wget http://download.redis.io/releases/redis-3.0.7.tar.gz 下载redis的php扩展 wget http:// ...
- 最新apache多域名多站点配置
httpd.conf===> Listen Listen ServerName 用IP地址作为servername LoadModule rewrite_module modules/mod_r ...
- python 简明教程 【转】
转自:https://learnxinyminutes.com/docs/python/ # Single line comments start with a number symbol. &quo ...
- 时间标准基础知识UTC和ISO8601
过去世界各地原本各自订定当地时间,但随着交通和电讯的发达,各地交流日益频繁,不同的地方时间,造成许多困扰,于是在西元1884年的国际会议上制定了全球性的标准时,明定以英国伦敦格林威治这个地方为零度经线 ...
- JavaScript跨浏览器绑定事件函数的优化
JavaScript作为一门基于事件驱动的语言(特别是用在DOM操作的时候),我们常常需要为DOM绑定各种各样的事件.然而,由于低版本的IE的不给力,在绑定事件和移除事件监听上都与众不同,我们常常需要 ...
- 记一次挂马清除经历:处理一个利用thinkphp5远程代码执行漏洞挖矿的木马
昨天发现 一台服务器突然慢了 top 显示 几个进程100%以上的cpu使用 执行命令为 : /tmp/php -s /tmp/p2.conf 基本可以确定是被挂马了 下一步确定来源 last 没有 ...
- Linux复制粘贴快捷键
1. 在终端下: 复制命令:Ctrl + Shift + C 组合键.粘贴命令:Ctrl + Shift + V 组合键. 2. 在控制台下: 复制命令:Ctrl + Insert 组合键 或 用鼠标 ...
- Qt中的主窗口之菜单栏
1.Qt中的主窗口 主窗口为建立应用程序用户界面提供了一个框架 Qt开发平台中直接支持主窗口的概念 QMainWindow是Qt中主窗口的基类 QMainWindow继承于QWidget是一种容器类型 ...

