Jmeter分布式配置

Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,jmeter短小精悍一有了使用多台机器同时产生负载的机制。

  那么,是如何实现多台负载机同时运行的呢?当然不会多个人坐在多台负载机面前,一喊开始,大家同时启动jmeter。这种方式很笨,也很难达到真正的同步。其实,我们通过单个jmeter 客户端就可以控制多个远程的jmeter服务器,使它们同步的对服务器进行压力测试。

通过远程运行jmeter,测试人员可以跨越多台低端计算机复制测试,这样就可以模拟一个比较大的服务器压力,一个jmeter客户端实例,理论上可以控制任意多的远程jmeter实例,并通过他们收集测试数据。这样一样,就有了如下特性:

*   保存测试采样数据到本地机器

*   通过单台机器管理多个jmeter执行引擎。

*   没有必要将测试计划复制到每一台机器,jmeter GUI客户端会将它发往每一台jmeter服务器。

*   每一台jmeter远程服务器都执行相同的测试计划,jmeter不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划。

 

  在1.4G Hz~3GHz 的CPU 、1GB 内存的 JMeter 客户端上,可以处理线程 100~300。但是Web Service 例外。XML处理是 CPU 运算密集的,会迅速消耗掉所有的CPU 。一般来说,以XML技术为核心的应用系统,其性能将是普通Web 应用的 10%~25% 。另外,如果所有负载由一台机器产生,网卡和交换机端口都可能产生瓶颈,所以一个JMeter 客户端线程数不应超过 100 。 

  采用JMeter 远程模式并不会比独立运行相同数目的非GUI 测试更耗费资源。但是,如果使用大量的JMeter 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞。

 

使用多台机器产生负载的操作步骤如下:

(1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent 。

(2) 运行所有 agent 机器上的jmeter-server 文件(假定使用两台机器192.168.9.99 和192.168.9.130 作为agent)

(3)在controller机器的jmeter的bin目录下,找到jmeter.properties 文件,编辑该文件:

查找:
remote_hosts=127.0.0.1
修改为:
remote_hosts=192.168.9.99:1099,192.168.9.130:1099 

这里要特别注意端口后,有些资料说明端口1644为jmeter的controller 和agent 之间进行通信的默认RMI端口号,但是在测试时发现,设置为1644运行不成功,改成1099后运行通过。另外还要留意agent的机子是否开启了防火墙等。

 

(4)启动controller 机子上的jmeter应用jmeter.bat,选择菜单“运行”--->“远程启动”,来分别启动agent ,也可以直接选择“远程全部启动”来将所有的agent启动。

 

 

遇到的常见问题

1、在Controller端上控制某台机器Run,提示"Bad call to remote host"。

解决方法:检查被控制机器上的jmeter-server有没有启动,或者JMeter.properties中remote_hosts的配置错误。
 
2、Agent机器启动Jmeter_server.bat时,后台提示:"could not find ApacheJmeter_core.jar"
解决方法:确定在Agent机器安装jdk,并设置环境变量
 
3、远程启动时,报错:

ERROR - jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
java.net.ConnectException: Connection refused: 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.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at org.apache.jmeter.engine.ClientJMeterEngine.getEngine(ClientJMeterEngine.java:54)
at org.apache.jmeter.engine.ClientJMeterEngine.<init>(ClientJMeterEngine.java:67)
at org.apache.jmeter.gui.action.RemoteStart.doRemoteInit(RemoteStart.java:180)
at org.apache.jmeter.gui.action.RemoteStart.doAction(RemoteStart.java:80)
at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:81)

这个问题终于被我解决了,其实原因好简单呀。只要将本机的server.bat执行即可。

注意:要是在配置的地方写了127.0.0.1 的话 就要开本机的 sever.bat. 不写的话 就不用开了

 

4、查看1099端口是否被占用

netstat -ano | findstr "1099"

tasklist | findstr "1099"

文章转载自:http://blog.csdn.net/jlminghui/article/details/42063231

                http://www.cnblogs.com/yangxia-test/p/4016277.html


另:详细配置过程

尽量将每台机器上的jmeter安装配置路径设为相同

1.修改slave机器bin目录下的jmeter.properties配置,我的3台slave机器为:134.64.14.96、134.64.14.97、134.64.14.98

修改3台slave机器jmeter/bin目录下的jmeter.properties中server_port端口号为机器未被占用的端口号,一般默认为1099(可直接使用1099),此处我修改为7899(可以使用默认端口或者改成其他端口,只要未被占用就行),remote_hosts为127.0.0.1不需要修改,


修改完成保存,我配置的3台机器为:

134.64.14.96机器(remote_hosts:127.0.0.1、server_port:7899)

134.64.14.97机器(remote_hosts:127.0.0.1、server_port:7899)

134.64.14.98机器(remote_hosts:127.0.0.1、server_port:7899)

2. 修改完成保存,我配置的1台机器为:

134.64.14.95机器(remote_hosts:134.64.14.96:7899,134.64.14.97:7899,134.64.14.98:7899、server_port:注释掉不用打开)

完成了所有机器配置后,我们需要上传测试脚本,测试时只需要上传jmx文件到master机器即134.64.14.95机器的jmeter对应目录即可,其他执行机不需要上传jmx文件,因为master启动后会拷贝本地jmx到远程执行机上

3.现在我们来启动分布式测试,启动分布式测试分两步

首先启动执行机即slave机器134.64.14.96、134.64.14.97、134.64.14.98,每台slave机器都需要执行以下命令来启动jmeter-server

命令为:./jmeter-server


确认3台slave执行机都启动正确完成后,在启动master机器134.64.14.95,执行如下命令开启分布式测试

命令为:jmeter -n -t D:\JMWorkspace\BU-myAssert.jmx -r -l D:\JMWorkspace\JMResult\html.csv -e -o D:\JMWorkspace\JMHTMLResult


测试命令说明

 jmeter -n -t D:\JMWorkspace\BU-myAssert.jmx  --l D:\JMWorkspace\JMResult\html.csv -e -o D:\JMWorkspace\JMHTMLResult

n表示无GUI运行
t表示要运行的jmx文件
l指生成的文件名称,保存CSV结果文件的路径
r指远程将所有agent启动

e/o为结果保存为HTML文件路径

4. 测试结果说明

注意到上面控制台打印的信息中

summary +   5504 in 00:00:02 = 3590.3/s Avg:     1 Min:     0 Max:   174 Err:  5504 (100.00%) Active: 59 Started: 58 Finished: 0
summary + 1224043 in 00:00:30 = 40802.8/s Avg:     0 Min:     0 Max:   188 Err: 1224043 (100.00%) Active: 60 Started: 59 Finished: 0
summary = 1229547 in 00:00:32 = 38989.9/s Avg:     0 Min:     0 Max:   188 Err: 1229547 (100.00%)
解析:
summary为请求数目,指在多少时间内增加了多少请求数目,由此算出后面的3590.3/s、40802.8/s、38989.9/s也就是每秒完成请求数(吞吐量),每隔一段时间打印一行,最后一行可以看到请求总数为8213739,平均吞吐量为45495.4/s(每秒完成请求数)
summary = 8213739 in 00:03:01 = 45495.4/s Avg:     0 Min:     0 Max:   191 Err: 8213739 (100.00%)
另外active:60指活跃线程数,我们用3台机器并发测试,每台运行的脚本都为20个线程3分钟,所以在线活跃线程数为20*3=60个,运行时间为3分钟
错误率为:可以看出服务器能否承受这么大的并发,这里都是100%报错是由于同一ip短时间并发请求百度,百度是不允许的,所以会被拒绝发生报错
 
当然我们除了看控制台的信息以外,性能测试还需要关注:所有测试机器以及被测试机器的服务器指标如:cpu、磁盘io、内存消耗等,以及服务端和客户端日志信息
对于生成的jtl文件,我们可以进行解析生成我们关注的信息如:吞吐量、响应时间、点击率、错误率等等

备注:
1.使用已有的压力测试CSV日志文件生成报告
  • 基本命令格式:
    jmeter -g <log file> -o <Path to output folder>
  • 样例:
    jmeter -g D:\apache-jmeter-3.0\bin\testLogFile -o ./output
  • jmeter -g D:\JMWorkspace\JMResult\html.csv -o D:\JMWorkspace\JMHTMLResult

2.控制机不能获取压力机测试数据

分布式默认注释掉测试结果,将控制机jmeter.properties中的mode=Standard注释去掉即可


3.修改jmeter单机配置:

linux环境,修改jmeter.sh
下面添加如下配置:
java $JVM_ARGS -Xms1G -Xmx5G -XX:MaxPermSize=512m -Dapple.laf.useScreenMenuBar=true -jar `dirname $0`/ApacheJMeter.jar "$@"
一般根据实际情况修改-Xmx5G,由小改到大。
windows环境,修改jmeter.bat
set HEAP=-Xms256m -Xmx256m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
改为:
set HEAP=-Xms256m -Xmx1024m
set NEW=-XX:NewSize=128m -XX:MaxNewSize=512m

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JMeter分布式配置是指将JMeter的负载测试任务分发到多个机器上进行执行,以模拟并发访问的情况。分布式配置可以提高测试的效率和准确性。 在JMeter分布式配置中,需要进行以下几个步骤: 1. 准备多台机器作为Master和Slave。其中Master机器用于控制整个测试过程,而Slave机器用于执行测试脚本。 2. 在Master机器上,启动JMeter,并选择“Remote Start”选项,或者使用命令行执行"jmeter-server"命令来启动JMeter Server。 3. 在Slave机器上,启动JMeter,并选择“Remote Start”选项,或者使用命令行执行"jmeter-server"命令来启动JMeter Server。 4. 在Master机器上,配置测试计划,包括线程组、请求和断言等。然后将测试计划保存为.jmx文件。 5. 在Master机器的JMeter GUI中,选择“Add”->“Config Element”->“Remote Testing”->“Distributed Testing”。在“Remote Servers”中添加所有Slave机器的IP地址和端口号。 6. 配置好后,点击“Start”按钮开始执行测试。 需要注意的是,在配置JMeter分布式环境时,需要确保Master和Slave机器之间的网络连接正常,并且所有机器上的JMeter版本保持一致。此外,还需要注意防火墙设置,确保在Master和Slave机器之间的通信端口是开放的。 通过以上步骤,就可以成功配置JMeter分布式环境,实现负载测试任务的分发和执行。这样可以更好地模拟真实的并发访问情况,提高性能测试的准确性和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [jmeter分布式环境搭建](https://blog.csdn.net/lvan_test/article/details/111570921)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值