测试环境

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:

JMeter远程分布式联机性能测试" title="JMeter JMeter远程分布式联机性能测试">


步骤
4:验证测试

重新在JMeter客户机上开启Jmeter,载入调试好的脚本

如下,运行

->

远程启动
|远程全部启动,可以选择单独启动某个负载机或者一次性启动全部负载机

JMeter远程分布式联机性能测试" title="JMeter JMeter远程分布式联机性能测试" width="558" height="380">

说明:

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”的对应文件拷贝

JMeter远程分布式联机性能测试" title="JMeter JMeter远程分布式联机性能测试" width="558" height="231">

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

at

at

at

at

at

at sun.rmi.trans

如上,很好奇这个ip是哪里的,打开客户机,cmd命令查看

JMeter远程分布式联机性能测试" title="JMeter JMeter远程分布式联机性能测试" width="558" height="554">

如上,原因就不用说了吧,解决方法如下:


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

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

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

    JMeter远程分布式联机性能测试   by:授客 QQ:1033553122 测试环境 apache-jmeter-2.13 Java JDK版本:1.8 1.  JMeter分布式测试简介 当一个 ...

  2. jmeter的分布式部署

    在使用Jmeter进行性能测试时,如果并发数比较大(比如5000+并发),单台电脑的配置(CPU和内存)可能无法支持(公司配的联想e450家庭用笔记本一般到1000就会卡死),这时可以使用Jmeter ...

  3. Jmeter之分布式测试

    1)Jmeter 是纯java 应用,对于CPU和内存的消耗比较大,并且受到JVM的一些限制: 一般情况下,依据机器配置,单机的发压量为300-600,因此,当需要模拟数以千计的并发用户时,使用单台机 ...

  4. (九) 使用Jmeter 做分布式压测 ;

    在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能. 一.Jmeter分 ...

  5. jmeter配置分布式调度:远程启动其他机器实现多台pc一起并发

    原文转自:https://www.cnblogs.com/whitewasher/p/6946207.html Jmeter分布式部署测试-----远程连接多台电脑做压力性能测试 在使用Jmeter进 ...

  6. JMETER远程运行_多机联合负载

    JMETER远程运行_多机联合负载 远程运行是用一台JMeter控制机控制远程的多台机器来产生负载.控制机与负载机之间通过RMI方式来完成通信.在负载机上运行Agent程序(启动命令是%JMETER_ ...

  7. jmeter进行分布式压测过程与 注意事项

    jmeter命令行运行但是是单节点下的, jmeter底层用java开发,耗内存.cpu,如果项目要求大并发去压测服务端的话,jmeter单节点难以完成大并发的请求,这时就需要对jmeter进行分布式 ...

  8. Jmeter远程测试

    11.3 详解JMeter远程测试(1) 2012-04-09 09:14 温素剑 电子工业出版社 字号:T | T 综合评级: 想读(7)  在读(2)  已读(0)   品书斋鉴(0)   已有9 ...

  9. 第八篇:Jmeter的分布式测试

    一: 由于Jmeter本身的瓶颈,当模拟数以千计的用户并发的时候,使用单台机器会有些力不从心,甚至还会引起Java内存溢出的错误,要解决这个问题,就要使用分布式测试,运行多台机器,也就是所谓的Agen ...

随机推荐

  1. 读取url接口数据

    string url = "http://localhost:8180/city-smscenter/smscenter?cmd=flowsms.queryMobileSmsList& ...

  2. E - 稳定排序(结构体)

    大家都知道,快速排序是不稳定的排序方法. 如果对于数组中出现的任意a[i],a[j](i<j),其中a[i]==a[j],在进行排序以后a[i]一定出现在a[j]之前,则认为该排序是稳定的. 某 ...

  3. Scrapy 中 Request 对象和 Response 对象的各参数及属性介绍

    Request 对象 Request构造器方法的参数列表: Request(url [, callback=None, method='GET', headers=None, body=None,co ...

  4. NOIP2013 货车运输(最大生成树,倍增)

    NOIP2013 货车运输(最大生成树,倍增) A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道 ...

  5. 关于logrotate工具的日志切割

    logrotate是一个非常好的文件切割工具!! 具体配置如下: /var/log/debug.log{         daily            ; 每天转储         rotate ...

  6. 去除掉svn目录

    使用svn提交时,造成有些文件锁住不能使用,百度得到下面相似问题以及解决方法: /*********************************************************** ...

  7. python统计字符串中字符个数

    str = "xxx" result = {} for i in set(str):#set将字符串转为集合对象,用于去重,减少计算量 result[i] = str.count( ...

  8. Git的安装使用

    1.什么是Git Git是一个自由和开源的分布式版本管理工具,用于有效.高速的处理任何或大或小的项目.最初由Linux Torvalds编写,用于帮助管理Linux内核开发而开发的一个开放源码的版本管 ...

  9. 【Leetcode】Remove Duplicates from Sorted List II

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  10. CuteFTP文件列表按名称排序,有中文文件名时,软件死掉的解决办法

    看到很多人的解决办法是切换到一个没有中文的文件夹,点击排序后,再切换回来,这个的确是可以解决问题,但是有些繁琐! 直接一步到位的解决办法是: 依次点击菜单:工具->全局选项->导航-> ...