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 ...
随机推荐
- 戴尔笔记本Inspiron 7560(灵越) 加装固态硬盘从选购固态硬盘到系统迁移到设置SSD为第一启动(受不了了,网上的教程就没有完整的)
菜鸡我的笔记本为戴尔灵越Inpsiron 7560,其实Inspiron 15 7560 和Inspiron 7560是同一个型号. 电脑拆了安过内存条,换过电池,现在又加了一块固态硬盘. 因为不想安 ...
- Vue 2.0 Application Sample
===搭建Demo=== http://blog.csdn.net/wangjiaohome/article/details/51728217 ===单页Application=== http://b ...
- 【剑指offer】顺时针打印数组
顺时针打印数组 题意 例如我们有一个二维数组,如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 现在要按照顺时针打印出来,结果应该为: 1 2 3 4 8 12 16 ...
- VB查询数据库之组合查询——机房收费总结(二)
在机房收费系统中,组合查询用的还是挺多的,像上机状态查询窗体.学生上机统计信息窗体.操作员工记录窗体.基本信息维护窗体.这其中,学生基本信息维护窗体中的东西比较多,就以它为例子,说说组合查询吧! 学生 ...
- 安装SQL2008时显示必须重启计算机才可以继续安装的错误—解决办法
数据库学习已经有一段时间了,前几天进入了SQL视频的学习,在安装数据库的时候,出现问题,总显示重启失败 ,无法继续安装,如图所示 出现这种问题 ,应该如何解决呢? 解决方法如下: (1).开始菜单-搜 ...
- 【BZOJ 1018】【SHOI 2008】堵塞的交通traffic
http://www.lydsy.com/JudgeOnline/problem.php?id=1018 线段树维护连通性. 把每一列看成一个节点,对于线段树上的每一个节点,维护8个信息,前6个字面意 ...
- 【计算几何】【分类讨论】Gym - 101243I - Land Division
题意:给你一个n个点的凸包,让你切一刀,使得它变成一个m边形和一个K边形,问你切的这一刀最短是多少. 如果m+K==n+4,那么一定切在两条边上,但是由于两个线段间的最短距离,至少会经过一条线段的一个 ...
- Codeforces Beta Round #3 A. Shortest path of the king 水题
A. Shortest path of the king 题目连接: http://www.codeforces.com/contest/3/problem/A Description The kin ...
- (转)Hadoop系列-IPC模型
学习笔记Mark IPC 实现RPC的一种方法,具有快速.简单的特点. 它不像Sun公司提供的标准RPC包,基于Java序列化. IPC无需创建网络stubs和skeletons. IPC中的方法调用 ...
- Android 权限处理
概述: 为了保护系统的完整性和用户隐私权,Android 在访问受限的沙盒中运行每款应用. 如果应用需要使用其沙盒以外的资源或信息,则必须明确请求权限. 根据应用请求的权限类型,系统可能会自动授予权限 ...