JMeter JMeter远程分布式联机性能测试
JMeter远程分布式联机性能测试
by:授客 QQ:1033553122
测试环境
apache-jmeter-2.13
Java JDK版本:1.8
1、 JMeter分布式测试简介
当一个JMeter客户端因网络限制等因素,无法模拟足够的用户对服务器施压时,需要用到JMeter分布式测试:用一台控制机,控制多台远程负载机,同时对服务器施压。
2、 配置与实操
步骤1 选定客户端
选择一台本地机器,当作JMeter客户端(控制器),用于控制远程JMeter实例(也叫JMeter 引擎),即远程负载生成机,并收集来自从这些远程负载机的数据。
在本机上创建并调试脚本,保证脚本可运行。
步骤2 修改jmeter.properties配置文件
修改$jmeter_home\bin\jmeter.properties文件(形如D:\Program Files (x86)\Jmeter\apache-jmeter-2.13\bin\jmeter.properties),打开该文件,找到如下内容,并添加带背景色部分的内容:
# Remote Hosts - comma delimited
remote_hosts=127.0.0.1
remote_hosts=192.168.9.133:1099,192.168.9.66:1099
#remote_hosts=localhost:1099,localhost:2010
说明:如上,192.168.9.133,192.168.9.66分别为远程负载机的ip地址,端口1099为JMeter用于访问远程负载生成机的端口rmi.port,“ip地址:端口”之间以逗号分隔,按这种方式可以增加多个负载机,具体上限未知。
关于端口更改的说明(参考官方文档):
1)更改访问远程负载机的端口(假设改成1234
JMeter客户端:
启动前,修改jmeter.properties,找到如下带背景色内容:
#server.rmi.port=1234
修改为如下:
server.rmi.port=1234
服务器端:
Windows
进入cmd控制台操作:
C:\JMETER> SET SERVER_PORT=1234
C:\JMETER> JMETER-SERVER [other options]
linux
$ SERVER_PORT=1664 jmeter-server [other options]
2)更改供负载机监听远程请求使用的rmi端口
如果有必要的话,启动前,修改jmeter.properties,找到如下带背景色内容:
#client.rmi.localport=0
修改为如下
client.rmi.localport=xxx
说明:
1、client.rmi.localport=0表示随机分配端口,否则使用指定端口
2、个人理解,这里的端口是客户端和负载机建立TCP套socket接字时,分配给客户端的端口
3)为JMeter引擎指定一个固定端口(假设为3000
如果有必要的话,启动前,修改jmeter.properties,找到如下带背景色内容:
#server.rmi.localport=4000
修改成如下:
server.rmi.localport=3000
说明:啥时候需要改这个端口我也不是很懂
说明:以上3点未经过本人实践验证,仅供参考,通常使用默认的即可
步骤3 启动负载机
windows:
双击$JMeter_home\bin\jmeter-server.bat(形如D:\Program Files (x86)\Jmeter\apache-jmeter-2.13\bin\-server.bat)
Linux:
运行$JMeter_home\bin\jmeter-server
eg:

步骤4:验证测试
重新在JMeter客户机上开启Jmeter,载入调试好的脚本
如下,运行 -> 远程启动|远程全部启动,可以选择单独启动某个负载机或者一次性启动全部负载机

说明:
1、这里的启动负载机后会立即执行负载测试,我们可以通过
a) 查看结果树等监听器查看请求是否成功,为方便查看是否执行成功(看执行的请求数), 建议开始正式测试前,先把线程组设置为单线程,仅运行一次,等确定没问题以后再改成目标设置
注意:关于线程组中“线程数”的正确理解
举例说明:假设“线程数”设置为1,总的有2台负载机(每台负载机只运行一个JMeter实例),1台客户机,那么启动全部负载机进行负载测试时,总的线程数为 负载机数 x 线程数 = 2,也就说,每台负载机都会启动线程组中指定的“线程数”来执行负载测试
b)结合菜单“选项->Log Viewer”查看运行日志
c) 查看远程负载机输出是否正常,如下

我们可以看到,负载机成功执行了好几次,正常开始(Starting),正常结束(Finished)
2、客户机性能不够好或者网络不够好的情况下,一次性启动全部负载机可能会有点“卡”
步骤5:执行负载测试
说明:提前停止/退出
如果想停止远程负载机的测试,可以选择 运行 -> 远程停止|远程全部停止
如果想远程负载机退出程序,可以选择 运行 -> 远程退出|远程全部退出
3、 注意事项及问题分析
注意事项:
a)客户机上一定要保存并打开一份测试计划脚本
b)不需要复制测试计划脚本到负载机上,客户机会自动把脚本分发到负载机上
c) 每台负载机,客户端上安装的java jdk版本(至少保持大版本一致),特别是jmeter版本及插件,要保持一致,防止出错和执行效率等问题
d) 如果客户机上测试计划脚本,使用了参数文件,那么需要在负载机上相同路径下,放置对应文件的同名文件拷贝。需要认真检查每个插件使用的数据文件
举例说明:
比如,我的查看结果树监听器,把数据保存到了某个文件:F:\查看结果树.csv文件,那么我们要负载机器上的F:\路径下,存一份名为“查看结果树.csv”的对应文件拷贝

e) 客户机和负载机最好分开,由于客户机需要发送信息给负载机并且会接收负载机回传回来的测试数据,所以客户机自身会有消耗,所以建议单独用一台机器作为客户机。
f) 避免防火墙阻止对应端口的访问,最好把防火墙都关闭了。
问题分析
实践中遇到一个问题,就是JMeter可以启动负载机,但是启动后没能执行成功,没看到发起的请求,通过Log Viewer也没看到错误信息,后面咋办?
找日志,负载机上打开$JMeter_home\bin\jmeter-server.log,查看是否有报错信息,结果发现如下:
2016/10/31 20:37:20 ERROR - jmeter.samplers.BatchSampleSender: sampleOccurred java.rmi.ConnectException: Connection refused to host: 169.254.82.102; nested exception is:
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
……(略)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at sun.rmi.trans
如上,很好奇这个ip是哪里的,打开客户机,cmd命令查看

如上,原因就不用说了吧,解决方法如下:
确保万无一失,把客户机上“本地连接”除外的网卡适配器都禁用,然后重新启动客户机上的JMeter软件(一定要重启),重新打开负载机上的jmeter-server.bat,然后重新执行步骤4,OK

参考连接:
http://jmeter.apache.org/usermanual/remote-test.html
JMeter JMeter远程分布式联机性能测试的更多相关文章
- JMeter远程分布式联机性能测试
测试环境 apache-jmeter-2.13 Java JDK版本:1.8 1. JMeter分布式测试简介 当一个JMeter客户端因网络限制等因素,无法模拟足够的用户对服务器施压时,需要用到J ...
- jmeter使用—远程分布式
今天要说的是在远程服务器上使用多台服务器进行noGUI分布式使用jmeter压测. 1.首先准备几台服务器,服务器上都需要安装同一个版本的jmeter. 2.在服务器上启动jmeter的方式是在jme ...
- JMeter学习-026-JMeter 分布式(远程)参数化测试实例
以前文所述对文章详情的HTTP请求进行性能测试为例.日常实际场景中,不可能所有的人都在同时访问一篇文章,而是多人访问不同的文章,因而需要对文章编号进行参数化,以更好的模拟日常的性能测试场景.同时,因文 ...
- JMeter学习-022-JMeter 分布式测试(性能测试大并发、远程启动解决方案)
在使用 JMeter 进行性能测试时,难免遇到要求并发请求数比较的场景,此时单台测试机的配置(CPU.内存.带宽等)可能无法支持此性能测试场景.因而,此时 JMeter 提供的分布式测试功能就有了用武 ...
- 基于Jmeter跟Jenkins的自动化性能测试的一站式解决方案(转)
www.MyException.Cn 网友分享于:2015-08-26 浏览:0次 基于Jmeter和Jenkins的自动化性能测试的一站式解决方案 作者: Yu, Qingguo Shen, ...
- Jmeter工具使用-分布式架构和服务器性能监控解决方案
在对项目做大并发性能测试时,常会碰到并发数比较大(比如需要支持10000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能来搭建分布式并发环境. 一.J ...
- Jmeter初步使用二--使用jmeter做一个简单的性能测试
经过上一次的初步使用,我们懂得了Jmeter的安装与初步使用的方法.现在,我们使用Jmeter做一个简单的性能测试.该次测试,提交的参数不做参数化处理,Jmeter各元件使用将在介绍在下一博文开始介绍 ...
- JMeter之Http协议接口性能测试
一.不同角色眼中的接口 1.1,开发人员眼中的接口 1.2,测试人员眼中的接口 二.Http协议基本介绍 2.1,常见的接口协议 1.:2. :3. :4.:5.: 6. 2.2,Http协议栈 ...
- Jmeter+maven+Jenkins构建云性能测试平台(mark 推荐)
转自:http://www.cnblogs.com/victorcai0922/archive/2012/06/20/2555502.html Jmeter+maven+Jenkins构建云性能测试平 ...
随机推荐
- 《你不知道的javascript》读书笔记2
概述 放假读完了<你不知道的javascript>上篇,学到了很多东西,记录下来,供以后开发时参考,相信对其他人也有用. 这篇笔记是这本书的下半部分,上半部分请见<你不知道的java ...
- CentOS 配置SOCKS5代理服务
SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全 通过yum安装 ...
- Setting Up Swagger 2 with a Spring REST API
Last modified: August 30, 2016 REST, SPRING by baeldung If you're new here, join the next webinar: & ...
- OC学习4——OC新特性之块(Block)
文章主要参考 关于OC中的block自己的一些理解(一) 对块的深入理解 浅析ios开发中Block块语法的妙用 1.关于block block的作用:保存一段代码. 苹果官方推荐的一种语法,类似 ...
- 从零开始学 Web 之 DOM(五)元素的创建
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...
- Kali中装中文输入法小企鹅
STEP 1. 装fcitx框架,apt-get install fcitx STEP 2. 装googlepinyin输入法,apt-get install fcitx-googlepinyin S ...
- PHP官方网站及PHP手册
每个人都知道php.net,我们或早或晚的都会来到这里并不断的访问它.它是PHPer的主要参考网站,拥有大量有用的信息,但是这些信息却不是那么显而易见. 比较有用的官方PHP资源: PHP官方函数手册 ...
- 使用BizTalk实现RosettaNet B2B So Easy
使用BizTalk实现RosettaNet B2B So Easy 最近完成了一个vmi-hub的B2B项目,使用Rosettanet 2.0的标准与一家品牌商,OEM,供应商实现B2B.一共交换4个 ...
- SpringBoot学习(一)—— web项目基础搭建
首先我们在浏览器打开这个网站 https://start.spring.io/ 打开后可以看到以下页面 在这里我们可以快速搭建一个SpringBoot基础项目,填写和选择完相应的信息后,我们点击那个绿 ...
- MAC ACL、RACL和VACL
拓扑结构: 配置IP地址.VLAN及路由: SW1(config)#int range f0/1 - 2SW1(config-if-range)#switchport mode accessSW1(c ...