jmeter命令行运行-分布式测试

jmeter命令行运行-分布式测试

上一篇文章我们说到了jmeter命令行运行但是是单节点下的, jmeter底层用java开发,耗内存、cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式测试:

1:先说说分布式测试原理

处理过程:

一:调度机master启动以后,会拷贝本地的jmx文件分发到远程的slave机器上;

二:slave机器拿到脚本以后启动命令行模式去执行脚本,对于每台slave机器拿到的脚本都是一样的,所以如果jmx脚本为50个线程跑3分钟,那么实际并发就是50*3=150个线程并发跑3分钟;

三:执行时,slave会把执行获得的数据结果传给master机器,master机器会收集所有slave机器的信息并汇总,这样master机器上就存在一份所有slave机器汇总的数据结果。

 

注意事项:

一:我们注意到master机器启动后会拷贝jmx文件到slave机器,所以我们不需要在每台slave机器上也上传一份jmx,只需要在master机器上上传一份jmx脚本即可。

二:参数化文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

三:调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为master。

四:保证每台机器的jmeter版本和插件版本相同,避免造成一些意外问题。

五:分布式测试总样本数 = 线程数 * 循环次数 * 执行机总数, 样本计数逻辑为:执行机slave执行的测试脚本是由调度机master分发的,故每台执行机执行的测试脚本都是相同的,故而性能测试总样本数 = 测试脚本样本数 * 执行机总数,而测试脚本样本数为线程数 * 循环次数

 

2:说完了原理,现在我们来说如何做jmeter分布式测试

  • 在所有需要做分布式的机器上部署java和jmeter,要求需要保证每台机器上部署的jmeter版本相同插件版本也相同,最好部署在同一路径下(这样如果有csv参数化比较方便)

部署jmeter很简单,只需从官网下载相应版本然后传到服务器上进行解压缩就可以了这里给出我的云盘地址:http://pan.baidu.com/s/1bI3r2I 密码:f5ll。

比如我部署在134.64.14.95、134.64.14.96、134.64.14.97、134.64.14.98四台机器上,每台机器部署路径为:/home/tester

 

  • 修改slave机器bin目录下的jmeter.properties配置,我的3台slave机器为:134.64.14.96、134.64.14.97、134.64.14.98

修改3台slave机器jmeter/bin目录下的jmeter.properties中server_port端口号为机器未被占用的端口号,一般默认为1099,此处我修改为7899(可以使用默认端口或者改成其他端口,只要未被占用就行),remote_hosts为127.0.0.1不需要修改

修改完成保存,我配置的3台机器为:

134.64.14.96机器(remote_hosts:127.0.0.1、server_port:7899)

134.64.14.97机器(remote_hosts:127.0.0.1、server_port:7899)

134.64.14.98机器(remote_hosts:127.0.0.1、server_port:7899)

 

  • 完成slave机器的配置后,此时配置master机器,我的1台master机器为134.64.14.95

注意到由于master机器作为调度机本身会有一定的性能消耗所以我们配置远程执行机的时候并没有把master机器配置进去,只配置了3台执行机

修改完成保存,我配置的1台机器为:

134.64.14.95机器(remote_hosts:134.64.14.96:7899,134.64.14.97:7899,134.64.14.98:7899、server_port:注释掉不用打开)

 

  •  完成了所有机器配置后,我们需要上传测试脚本,测试时只需要上传jmx文件到master机器即134.64.14.95机器的jmeter对应目录即可,其他执行机不需要上传jmx文件,因为master启动后会拷贝本地jmx到远程执行机上

 

  • 现在我们来启动分布式测试,启动分布式测试分两步:

一:首先启动执行机即slave机器134.64.14.96、134.64.14.97、134.64.14.98,每台slave机器都需要执行以下命令来启动jmeter-server

命令为:./jmeter-server

 

二:确认3台slave执行机都启动正确完成后,在启动master机器134.64.14.95,执行如下命令开启分布式测试

命令为:./jmeter -n -t baidu_requests_results.jmx -r -l baidu_requests_results.jtl

 

3:测试命令说明

 ./jmeter -n -t baidu_requests_results.jmx -r -l baidu_requests_results.jtl 

n表示无GUI运行
t表示要运行的jmx文件
l指生成的文件名称
r指远程将所有agent启动

4:测试结果说明

注意到上面控制台打印的信息中

summary +   5504 in 00:00:02 = 3590.3/s Avg:     1 Min:     0 Max:   174 Err:  5504 (100.00%) Active: 59 Started: 58 Finished: 0
summary + 1224043 in 00:00:30 = 40802.8/s Avg:     0 Min:     0 Max:   188 Err: 1224043 (100.00%) Active: 60 Started: 59 Finished: 0
summary = 1229547 in 00:00:32 = 38989.9/s Avg:     0 Min:     0 Max:   188 Err: 1229547 (100.00%)
解析:
summary为请求数目,指在多少时间内增加了多少请求数目,由此算出后面的3590.3/s、40802.8/s、38989.9/s也就是每秒完成请求数(吞吐量),每隔一段时间打印一行,最后一行可以看到请求总数为8213739,平均吞吐量为45495.4/s(每秒完成请求数)
summary = 8213739 in 00:03:01 = 45495.4/s Avg:     0 Min:     0 Max:   191 Err: 8213739 (100.00%)
另外active:60指活跃线程数,我们用3台机器并发测试,每台运行的脚本都为20个线程3分钟,所以在线活跃线程数为20*3=60个,运行时间为3分钟
错误率为:可以看出服务器能否承受这么大的并发,这里都是100%报错是由于同一ip短时间并发请求百度,百度是不允许的,所以会被拒绝发生报错
当然我们除了看控制台的信息以外,性能测试还需要关注:所有测试机器以及被测试机器的服务器指标如:cpu、磁盘io、内存消耗等,以及服务端和客户端日志信息
对于生成的jtl文件,我们可以进行解析生成我们关注的信息如:吞吐量、响应时间、点击率、错误率等等
对于jtl文件的如何转换成图表及解析,在我的博客jmeter系列博文之-jmeter之jtl测试报告中有详细说明 

转载于:https://www.cnblogs.com/AmilyWilly/p/9010181.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

水龙吟

人长是、多怨我,怎如今、情词穷尽。文墨浅薄,一字不题,忧恨难泄。闻说古今,才子佳人,难成双美。柳七一句,玉萧声断。 人已去、玉长在,莽匹夫、世故笑,轮转境台空觅梦。乱言疯语,一大快事,还看此篇。醉也未极,到梦中戏猴…

ambari 自定义组件安装

借鉴:http://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari3/index.htmlAmbari 在启动的时候,会扫描 resource 目录下 Stack 下面的 service 配置。也就是每个 Service 的 metainfo.xml,同时会将这些配置信息放在自己的数据…

php 303,HTTP 的重定向301,302,303,307(转)

301 永久重定向,告诉客户端以后应从新地址访问.302 作为HTTP1.0的标准,以前叫做Moved Temporarily ,现在叫Found.现在使用只是为了兼容性的处理,包括PHP的默认Location重定向用的也是302.但是HTTP 1.1 有303 和307作为详细的补充,其实是对302的细化303:对于POST请求…

android 蓝牙各种UUID (转)

ServiceDiscoveryServerServiceClassID_UUID {00001000-0000-1000-8000-00805F9B34FB} BrowseGroupDescriptorServiceClassID_UUID {00001001-0000-1000-8000-00805F9B34FB}PublicBrowseGroupServiceClass_UUID {00001002-0000-1000-8000-00805F9B34FB} #蓝牙串口服务Serial…

android 双向滑动 seekbar

实现原理:1、自定义View,在onDraw(Canvas canvas)中,画出2个Drawable滑动块,2个Drawable滑动条,2个Paint(text)2、监听onTouchEvent()事件,修改滑块和滑动条的坐标,调用i…

java的算术表达式程序,java计算数学表达式

import java.util.EmptyStackException;import java.util.Stack;public class CaculateFunction {private static String[] TrnsInToSufix(String IFX)// PFX放后缀表达式,IFX为中缀表达式{String PFX[] new String[IFX.length()];StringBuffer numBuffer new Str…

java开发区块链只需150行代码

本文目的是通过java实战开发教程理解区块链是什么。将通过实战入门学习,用Java自学开发一个很基本的区块链,并在此基础上能扩展如web框架应用等。这个基本的java区块链也实现简单的工作量证明系统。本文用一个java例子,演示了开发一个区块链应用的过程,涉…

关于Linux的总结(三)

1.man_page.txt 1.内部命令:echo 查看内部命令帮助:help echo 或者 man echo2.外部命令:ls 查看外部命令帮助:ls --help 或者 man ls 或者 info ls3.man文档的类型(1~9) man 7 man man 5 passwd4.快捷键: ctrl c&…

按钮长按

2019独角兽企业重金招聘Python工程师标准>>> 用update来实现定时 //长按处理update: function (delta) {cc.log("update "delta);this.totalTimedelta;if(this.totalTime>TOUCH_LONG_TIMER_INVOKE){this.stopTimer();this.invokeTouchLong();}},stop…

php email 发送,php 发送 Email

require("mail/class.phpmailer.php");//调用$mail new PHPMailer();//实例化phpmailer$address "mailxi126.com";//接收邮件的邮箱$mail->IsSMTP(); // 设置发送邮件的协议:SMTP$mail->Host "smtp.163.com"; // 发送邮件的…

Git-如何将已存在的项目提交到git

1.首先在码云或者github上创建一个不带README.md的项目,然后复制远程库的地址(下面以码云为例):   2.进入本地已存在的项目目录:house    touch README.md //新建说明文件 git init //在当前项目目录中生成本地git…

Bash:字符串操作

参考:http://blog.csdn.net/finewings/article/details/5718133 字符串提取 去掉指定前缀 1. ${varible#pattern} 从头开始,左往右,删除最短的一个pattern结尾的字符串,即截取第一个pattern结尾子串之后的字符串 例…

ggplot2 theme相关设置—文本调整

在geom设置和scale设置之后,要想把图画的漂亮,theme设置是比不可少的 在theme 设置中element_text()是一项很重要的内容 element_text(family NULL, face NULL, colour NULL, size NULL, hjust NULL, vjust NULL, angle NULL, lineheight NULL) …

java top.dialog控件,java – 如何只为他的父级创建JDialog onTop?

可以说,我们有几个JFrame窗口同时可见,并且每个窗口都出现JDialog.当我们的窗口处于级联模式和对话框setAlwaysOnTop为真时,所有对话框将在最后一个窗口中可见.我只想将Dialog组件与其所有者关联起来,这样当你在Frames之间切换时,你只会在顶部获得一个对话框,并且在单击一个框架…

Eclipse出现the type java.lang.CharSequence can't be resolved.

出现这个问题我们需要安装一下JRE1.7这个版本,然后再项目里引入一下就可以了。 转载于:https://www.cnblogs.com/ganwei/p/4565883.html

php system 返回值127,php system 返回值 1

PayPal新的IPN返回接口(PHP)_计算机软件及应用_IT/计算机_专业资料。今天调试个客户的PayPal IPN返回接口死活不正确,用自己的老帐号和sandbox,都没问题,开始怀疑他......2.ob_start()还有一个不太明显但很致命的后门用法,实现代码如 2 9 ■ 1234 <?php /* 例 7*/$cmd sy…

window10 mysql5.7 解压版 安装

1. 解压mysql-5.7.11-winx64.zip 到某文件夹&#xff0c; 如C:\DevelopCommon\mysql-5.7.11-winx64。 2. 配置环境变量 变量名 &#xff1a; MYSQL_HOME 变量值 &#xff1a; C:\DevelopCommon\mysql-5.7.11-winx64 -------------- 变量名 &#xff1a; Path 变量值 &#xff…

Vmware中的centos虚拟机克隆之后没有eth0

克隆虚拟机之后&#xff0c;CentOS没有eth0的解决办法 我们常常需要从一台已经安装完成的虚拟机系统克隆出来一个新系统&#xff08;克隆时候必须要改变网卡物理地址&#xff0c;这一点无需多说&#xff09;&#xff0c;但是新系统启动之后&#xff0c;会发现系统网络工作不…

reset.css

body{margin:8px;} iframe{border:2px;} th,td{padding:1;} table{border-spacing:2px;border-collapse:separate;} dfn{斜体} <dfn> 标签可标记那些对特殊术语或短语的定义。 现在流行的浏览器通常用斜体来显示 <dfn> 中的文本。将来&#xff0c;<dfn> 还可…

java zero copy 实现,关于Zero Copy

概述很多web应用都会有大量的静态文件。我们通常是从硬盘读取这些静态文件&#xff0c;并将完全相同的文件数据写到response socket。这样的操作需要较少的CPU&#xff0c;但是效率有些低&#xff0c;它需要经过如下的过程&#xff1a;kernel从硬盘读取数据&#xff0c;越过ker…