JMeter远程分布式联机性能测试

 

by:授客 QQ1033553122

测试环境

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.133192.168.9.66分别为远程负载机的ip地址,端口1099JMeter用于访问远程负载生成机的端口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,然后重新执行步骤4OK

参考连接:

http://jmeter.apache.org/usermanual/remote-test.html

JMeter JMeter远程分布式联机性能测试的更多相关文章

  1. JMeter远程分布式联机性能测试

    测试环境 apache-jmeter-2.13 Java JDK版本:1.8 1.  JMeter分布式测试简介 当一个JMeter客户端因网络限制等因素,无法模拟足够的用户对服务器施压时,需要用到J ...

  2. jmeter使用—远程分布式

    今天要说的是在远程服务器上使用多台服务器进行noGUI分布式使用jmeter压测. 1.首先准备几台服务器,服务器上都需要安装同一个版本的jmeter. 2.在服务器上启动jmeter的方式是在jme ...

  3. JMeter学习-026-JMeter 分布式(远程)参数化测试实例

    以前文所述对文章详情的HTTP请求进行性能测试为例.日常实际场景中,不可能所有的人都在同时访问一篇文章,而是多人访问不同的文章,因而需要对文章编号进行参数化,以更好的模拟日常的性能测试场景.同时,因文 ...

  4. JMeter学习-022-JMeter 分布式测试(性能测试大并发、远程启动解决方案)

    在使用 JMeter 进行性能测试时,难免遇到要求并发请求数比较的场景,此时单台测试机的配置(CPU.内存.带宽等)可能无法支持此性能测试场景.因而,此时 JMeter 提供的分布式测试功能就有了用武 ...

  5. 基于Jmeter跟Jenkins的自动化性能测试的一站式解决方案(转)

    www.MyException.Cn  网友分享于:2015-08-26  浏览:0次   基于Jmeter和Jenkins的自动化性能测试的一站式解决方案 作者: Yu, Qingguo Shen, ...

  6. Jmeter工具使用-分布式架构和服务器性能监控解决方案

    在对项目做大并发性能测试时,常会碰到并发数比较大(比如需要支持10000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能来搭建分布式并发环境. 一.J ...

  7. Jmeter初步使用二--使用jmeter做一个简单的性能测试

    经过上一次的初步使用,我们懂得了Jmeter的安装与初步使用的方法.现在,我们使用Jmeter做一个简单的性能测试.该次测试,提交的参数不做参数化处理,Jmeter各元件使用将在介绍在下一博文开始介绍 ...

  8. JMeter之Http协议接口性能测试

    一.不同角色眼中的接口 1.1,开发人员眼中的接口    1.2,测试人员眼中的接口 二.Http协议基本介绍 2.1,常见的接口协议 1.:2. :3. :4.:5.: 6. 2.2,Http协议栈 ...

  9. Jmeter+maven+Jenkins构建云性能测试平台(mark 推荐)

    转自:http://www.cnblogs.com/victorcai0922/archive/2012/06/20/2555502.html Jmeter+maven+Jenkins构建云性能测试平 ...

随机推荐

  1. js中的柯里化

    概述 今天查询事件绑定资料的时候偶然遇到了柯里化这个词,很感兴趣,于是记录下来供以后开发时参考,相信对其他人也有用. 定义 柯里化是函数式编程里面的术语,它是把接受多个参数的函数变换成接受一个单一参数 ...

  2. Linux - 日志文件简介

    Linux日志文件绝大多数存放在/var/log目录,其中一些日志文件由应用程序创建,其他的则通过syslog来创建. Linux系统日志文件通过syslog守护程序在syslog套接字/dev/lo ...

  3. 离不开的微服务架构,脱不开的RPC细节

    服务化有什么好处? 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,如下图所示: 服务A:欧洲团队维护,技术背景是Java 服务B:美洲团队维护,用C++实现 ...

  4. Android中内容提供者ContentProvider的详解

    1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...

  5. ACM学习<二>

    穷举算法思想:     一句话:就是从所有可能的情况,搜索出正确的答案. 步骤:     1.对于一种可能的情况,计算其结果.     2.判断结果是否满足,YES计算下一个,no继续步骤1,然后判断 ...

  6. nginx介绍(四) - 反向代理

    前言 前面虚拟主机的部分, 发现我所有的修改, 都是对 nginx 目录下, nginx.conf 和 html 文件夹的操作. 我的最终目的, 是映射到不同电脑的tomcat里面去啊, 操作这里的h ...

  7. 和我一起打造个简单搜索之SpringDataElasticSearch关键词高亮

    前面几篇文章详细讲解了 ElasticSearch 的搭建以及使用 SpringDataElasticSearch 来完成搜索查询,但是搜索一般都会有搜索关键字高亮的功能,今天我们把它给加上. 系列文 ...

  8. java使用java.lang.management监视和管理 Java 虚拟机

    ClassLoadingMXBean 用于 Java 虚拟机的类加载系统的管理接口. CompilationMXBean 用于 Java 虚拟机的编译系统的管理接口. GarbageCollector ...

  9. SpringBoot(3) 文件上传和访问

    springboot文件上传 MultipartFile file,源自SpringMVC MultipartFile 对象的transferTo方法,用于文件保存(效率和操作比原先用FileOutS ...

  10. JavaWeb学习 (二十七)————监听器(Listener)在开发中的应用

    监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...