JMeter 七:远程测试
参考:http://jmeter.apache.org/usermanual/remote-test.html
http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.pdf
背景
如果Jmeter客户端的机器性能不够好,导致不能加压足够的用户数到服务器,或者jmeter客户端机器所在的网络受限,这个时候我们就可以使用单个Jmeter客户端来远程控制多个jmeter服务器。
通过远程跑Jmeter,我们可以在很多个低端计算机上复制测试,然后对被测服务器产生一个很大的压力。理论上Jmeter客户端可以控制任意数量的远程Jmeter,并通过它们收集所有数据。
包括如下特点:
- 保存测试采样数据到本地机器
- 用单个机器管理多个jmeter引擎
- 不需要拷贝test plan到每个服务器--客户端会给所有服务器发送test plan
多个远程服务器会跑相同的test Plan。Jmeter不会在服务器间分配负载,也就是说每一个服务器跑完整的Test Plan。所以假设我们设置了1000个thread,并且我们有6台jmeter服务器,我们最终会注入6000个Thread。
然而,远程模式会比单独跑相同数量的非GUI测试使用更多的资源。如果使用很多个远程jmeter服务器,可能会导致客户端jmeter过载,或者网络连接发生阻塞。
需要注意的是,如果我们在应用服务器上执行Jmeter引擎,会加重应用服务器的负担,从而造成测试结果被污染。推荐将应用服务器和Jmeter引擎配置在相同的以太网段内。这样既不会对应用服务器造成性能负担,也可以最小化网络对测试结果的影响。
工作方式
使用单个Jmeter客户端来远程控制多个jmeter服务器。
如上图, 192.168.0.2 就是JMeter客户端(主机器),控制其他的服务器(从机器)。
可以这么说:
Master 主机器:跑JMeter的机器,由该机器控制其他测试机器。
Slave 从机器:被主机器控制的机器,是真正对被测系统产生压力的机器。
Target 被测系统:被测试的系统所在机器。也就是被压的机器。
可以看到下图中,一个Master主机器控制多台Slave从机器,由从机器对被测系统施压,进行测试。
0. 配置节点
确保所有的节点(主机器和从机器):
- 使用相同版本的JMeter 以及 Java(使用不同版本的可能会带来问题)
- 系统关闭防火墙,或者开放特定端口
- 主机器和所有从机器最好在同一个子网内
如果测试使用数据文件,注意jmeter主机器不会发送这些数据文件到从机器,所以要确保每台从机器都保存了这些文件,并且路径正确。
如果有必要,我们可以编辑user.properties以及system.properties,给每台从机器设置不同的属性。当从机器启动,这些属性可能在 Test Plan中被使用,从而影响它的表现。
不同的从机器可以使用不同的数据文件。比如,如果每台从机器使用独一无二的ID,我们可以以此来使用不同的数据文件。
1. 启动从机器
在所有jmeter从机器上执行脚本:
- JMETER_HOME/bin/jmeter-server (unix环境)
- JMETER_HOME/bin/jmeter-server.bat (windows环境)
请注意,每个远程节点上只能有一个Jmeter从机器,除非我们使用不同的RMI端口。
2. 在主机器属性文件中添加服务器IP地址
打开主机器的属性文件 JMETER_HOME/bin/jmeter.properties,编辑 remote_hosts属性,添加远程Jmeter从机器的IP地址。多个IP地址之间以逗号分隔。
# Remote Hosts - comma delimited
remote_hosts=127.0.0.1
#remote_hosts=localhost:1099,localhost:2010
3. GUI方式启动主机器
启动主机器的jmeter,选好Test Plan,点击 Run –> Remote Start,我们会看到菜单下列出所有配置的远程的从机器的IP。选择
一个机器就可以在某个从机器上跑 Test Plan 。如果想在所有从机器上跑 Test Plan ,点击 Remote Start All即可。
4. 以命令行方式启动客户端
GUI模式适合用来debug,真正测试时最好使用命令行方式。
所有远程从机器停止运行测试后,命令行就会退出。
有两种命令行启动方式。
方式一:
jmeter -n -t script.jmx -r
这里直接在 jmeter.properties 中 remote_hosts定义的所有从机器上执行测试。
方式二:
jmeter -n -t script.jmx -R server1,server2,…
这里先定义远程从机器,然后在远程机器上启动测试。
其他
1)Jmeter使用的端口号
Jmeter/RMI需要建立一个从主机器到从机器的连接,默认使用1099端口。
Jmeter/RMI也需要建立一个从从机器到主机器的连接,目的是从从机器返回测试采样结果给主机器。这个端口一般是一个更高的端口号。这个端口号可以通过 jmeter.properties的 client.rmi.localport 属性来配置, 默认该值是0,表示端口号随机分配。
# Parameter that controls the RMI port used by the RemoteSampleListenerImpl (The Controler)
# Default value is which means port is randomly assigned
# You may need to open Firewall port on the Controller machine
#client.rmi.localport=
如果在主机器和从机器之间有防火墙或者其他的网络过滤器,我们需要保证它们允许上面连接的建立。
2)更换使用的端口号
默认情况下,Jmeter使用标准RMI端口号1099。参见 jmeter.properties 中的配置。
# RMI port to be used by the server (must start rmiregistry with same port)
#server_port=
如果1099号被占用,想更换一个端口号,分为两步
步骤一:更新 SERVER_PORT值,然后重新启动 Jmeter从机器。比如更换为1664端口。
windows
C:\JMETER> SET SERVER_PORT=
C:\JMETER> JMETER-SERVER [other options]
Unix
$ SERVER_PORT= jmeter-server [other options]
步骤二:主机器重新设置remote_hosts
打开主机器 jmeter.properties文件,编辑 remote_hosts 值类似 server:1664
3)使用其他的采样发送方式
测试计划中的 Listener 会把它们的结果返回给jmeter主机器,jmeter主机器会将结果写入到特定文件。采样结果产生之后,会同步发送回去。这就会影响服务器测试的最大throughput值。这种情况下我们就可以改变jmeter的采样发送方式。
打开jmeter.properties,可以看到备选的mode有多种,比如Standard、Hold、DiskStore、Batch等等。
默认使用的是 StrippedBatch模式。该模式会移除成功的采样返回的responseData,然后使用Batch方式来发送。
各种模式具体的区别参见:http://jmeter.apache.org/usermanual/remote-test.html#sendermode
# Since JMeter 2.9, default is MODE_STRIPPED_BATCH, which returns samples in
# batch mode (every samples or every minute by default)
# Note also that MODE_STRIPPED_BATCH strips response data from SampleResult, so if you need it change to
# another mode
# Hold retains samples until end of test (may need lots of memory)
# Batch returns samples in batches
# Statistical returns sample summary statistics
# hold_samples was originally defined as a separate property,
# but can now also be defined using mode=Hold
# mode can also be the class name of an implementation of org.apache.jmeter.samplers.SampleSender
#mode=Standard
#mode=Batch
#mode=Hold
#mode=Statistical
#Set to true to key statistical samples on threadName rather than threadGroup
#key_on_threadname=false
#mode=Stripped
#mode=StrippedBatch
#mode=org.example.load.MySampleSender
#
#num_sample_threshold=
# Value is in milliseconds
#time_threshold=
#
# Asynchronous sender; uses a queue and background worker process to return the samples
#mode=Asynch
# default queue size
#asynch.batch.queue.size=
# Same as Asynch but strips response data from SampleResult
#mode=StrippedAsynch
#
# DiskStore: as for Hold mode, but serialises the samples to disk, rather than saving in memory
#mode=DiskStore
# Same as DiskStore but strips response data from SampleResult
#mode=StrippedDiskStore
# Note: the mode is currently resolved on the client;
# other properties (e.g. time_threshold) are resolved on the server.
4)处理启动失败的节点
下面有3个属性。
client.tries :定义新建远程引擎的尝试次数。默认值为1,表示仅尝试一次。
client.retries_delay :两次尝试之间的延迟时间。单位为 milliseconds。
client.continue_on_fail:值为 true 表示忽略新建失败的节点,并继续在新建成功的节点上执行测试。默认为false,表示尝试新建之后,只要存在新建失败的节点,测试就会失败。
# When distributed test is starting, there may be several attempts to initialize
# remote engines. By default, only single try is made. Increase following property
# to make it retry for additional times
#client.tries= # If there is initialization retries, following property sets delay between attempts
#client.retries_delay= # When all initialization tries was made, test will fail if some remote engines are failed
# Set following property to true to ignore failed nodes and proceed with test
#client.continue_on_fail=false
JMeter 七:远程测试的更多相关文章
- jmeter 远程测试
如果你的JMeter客户机不能进行属性,来模拟 足够的用户强调您的服务器或在网络水平是有限的,存在一个选项来控制多个远程JMeter 引擎从一个JMeter客户机. 通过运行JMeter远程,你可以复 ...
- Jmeter远程测试
11.3 详解JMeter远程测试(1) 2012-04-09 09:14 温素剑 电子工业出版社 字号:T | T 综合评级: 想读(7) 在读(2) 已读(0) 品书斋鉴(0) 已有9 ...
- 【转】JMeter远程测试
详解JMeter远程测试(1) 如果运行JMeter客户端的机器性能不能满足测试需要,那么测试人员可以通过单个JMeter GUI客户端来控制多个远程JMeter服务器,以便对服务器进行压力测试,模拟 ...
- 使用JMeter进行负载测试——终极指南
这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 JMeter的实现方式以及采用的技术 安 ...
- 使用JMeter做压力测试
使用JMeter做压力测试 1.下载Jmeter 地址:http://jmeter.apache.org/download_jmeter.cgi 2.启动jmeter 运行bin/jmeter.bat ...
- jmeter分布式压力测试实践+登录为例
1.一张分布式压力的图解,如下 准备: 1.两台slave 2.一个master 3.待测目标地址 http://XXX 准备环境:linux环境,master如果可以最好有可视化电脑界面,便于jmx ...
- 第八篇:Jmeter的分布式测试
一: 由于Jmeter本身的瓶颈,当模拟数以千计的用户并发的时候,使用单台机器会有些力不从心,甚至还会引起Java内存溢出的错误,要解决这个问题,就要使用分布式测试,运行多台机器,也就是所谓的Agen ...
- 【转】使用JMeter进行负载测试——终极指南
使用JMeter进行负载测试——终极指南 这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 ...
- 如何使用Jmeter进行压力测试
Jmeter做压力测试的操作:Jmeter不仅可以做接口测试,还可以做压力测试,下面介绍介绍如何jmeter进行简单地压力测试.具体步骤如下: 第一步:添加请求,这里不介绍具体步骤,详见(https: ...
- linux环境下使用jmeter进行压力测试
linux环境下使用jmeter进行压力测试 linux环境下使用就meter进行压力测试: linux环境部署: 在Linux服务器先安装jdk: 2.以jdk-8u172-linux-x64.ta ...
随机推荐
- POJ 3171.Cleaning Shifts-区间覆盖最小花费-dp+线段树优化(单点更新、区间查询最值)
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4721 Accepted: 1593 D ...
- shell 指定行插入
#如果知道行号可以用下面的方法 sed -i '88 r b.file' a.file #在a.txt的第88行插入文件b.txt awk '1;NR==88{system("cat ...
- HihoCoder - 1715 树的连通问题
题面在这里! 正式告别文化课回归的第一题QWQ,然鹅半个月之后还是要退役QWQWQWQWQ 好像很久之前就见过的一个题,当时只会打一打 O(N^2) 的暴力QWQ,正好今天又写了遍这个暴力用来对拍23 ...
- 【并查集】【DFS】搭桥
[codevs1002]搭桥 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物.现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着 ...
- Eden的退役记
好久没更博客了, 这篇随笔不同于之前的学术性随笔.游记,只是来发泄一下自己的情感,回忆一下自己的OI经历…… 五年的OI生涯结束了 初一:懵懂的我刚接触了OI,被其功能吸引.由于运气好过了初赛,然而复 ...
- 【暴力】hdu6121 Build a tree
给你n,K,让你构造出一颗n个结点的完全K叉树,求所有结点子树大小的异或和. 先把n号结点到根的路径提取出来单独计算.然后这条路径把每一层分成了左右两部分,每一层的左侧和其上一层的右侧的结点的子树大小 ...
- [LOJ500]ZQC的拼图
题目大意: 给你一个m*m的格子,让你往里面放给定的直角三角形,直角顶点必须放在右上角且不能翻转,但是可以把所有给定的三角形放大一个整数倍k,问至少放大几倍能使格子的左下角和右上角连起来?(可以超出边 ...
- 通过Chrome模拟和调试网速慢的情况来限制一些P2P视频网站上传速度占满的情况
- HMAC结合“挑战/响应”保障数据传输安全
1.流程图: HMAC的一个典型应用是结合“挑战/响应”(Challenge/Response)来保障客户端和服务器传输数据的安全性 . 2.安全性分析: 使用的密钥是双方事先约定的,第三方不可能知道 ...
- Oracle10g 创建一个DataBase实例
Oracle10g创建DataBase实例如下:第一步:Oracle - OraDb10g_home1 -> 配置和移植工具 -> 打开Database Configuration Ass ...