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. Devops流程规范

    芯盾时代_Devops_Docker操作说明及使用规范 北京芯盾时代科技有限公司 2019年1月 修订记录 版本号 修订人 修订日期 修订描述 v0.1 芯盾 2019/1/15 初次创建 v0.2 ...

  2. Selenium3 + Python3自动化测试系列一——安装Python+selenium及selenium3 浏览器驱动

    一.安装Python https://www.python.org/downloads/ 验证Python是否安装成功.打开Windows命令提示符(cmd),输入python,回车 注意:在安装的过 ...

  3. [EXP]Microsoft Windows 10 - XmlDocument Insecure Sharing Privilege Escalation

    Windows: XmlDocument Insecure Sharing Elevation of Privilege Platform: Windows (almost certainly ear ...

  4. 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码

    摘要: 如同我们去年12月在 Flink Forward China 峰会所约,阿里巴巴内部 Flink 版本 Blink 将于 2019 年 1 月底正式开源.今天,我们终于等到了这一刻. 阿里妹导 ...

  5. Can't sendRedirect() after data has committed to the client

    resin下 response.sendRedirect("XXX"); 会报异常:java.lang.IllegalStateException: Can't sendRedir ...

  6. Hive的union和join操作

    建表语句: create table  tb_in_base (    id  bigint,    devid bigint,     devname string  ) partitioned b ...

  7. Django--视图函数views

    1 视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. ...

  8. python计算数组中对象出现的次数并且按照字典输出

    解决的问题如题,如果对Python不是很熟悉,解决的办法可能如下: test_array=[1,2,3,1,2,3]; def count_object1(array): result_obj={} ...

  9. Vue + Element UI 实现权限管理系统 前端篇(十五):嵌套外部网页

    嵌套外部网页 在有些时候,我们需要在我们的内容栏主区域显示外部网页.如查看服务端提供的SQL监控页面,接口文档页面等. 这个时候就要求我们的导航菜单能够解析嵌套网页的URL,并根据URL路由到相应的嵌 ...

  10. 反调试手法之CreateProcess反调试

    反调试手法之CreateProcess反调试 在学习Win32 创建进程的时候.我们发现了有一个进程信息结构体. STARTUPINFO. 这个结构体可以实现反调试. 具体CreateProcess可 ...