jmeter在做压测的时候有时候会因为并发需求大,一台机器内存不足以支撑而需要进行分布式压测!下面记录的是我怎么部署的过程
条件:
① jmeter 5.0
② jdk 1.8
③ 一台Windows、一台linux 或者两台linux服务器
1. 在部署jmeter分布式的时候,请先确认一下你的负载机(发送脚本和搜集数据的服务器)和执行器(执行压测服务器)在不在同一个网段上!
2. 调度机和执行机都安装相同的JDK,配置java环境变量(网上教程一大把)
注意:我是关闭了防火墙的,不知道不关有没有影响,没有尝试过
命令 | 解释 |
---|---|
service iptables status | 查询防火墙状态 |
chkconfig iptables on | 开启防火墙/重启后永久性生效 |
chkconfig iptables off | 关闭防火墙/重启后永久性生效 |
service iptables start | 开启防火墙/即时生效,重启后失效(即重启后防火墙自动开启) |
service iptables stop | 关闭防火墙/即时生效,重启后失效(即重启后防火墙自动开启) |
3.执行机配置
先配置好jdk和jmeter的环境变量(Linux配置jdk和jmeter环境变量自行百度),并在控制台中输入java -version
和jmeter -v
出现以下结果
- 在Windows下双击japache-jmeter-5.0\bin下的create-rmi-keystore.bat
- 按提示随便写入响应的内容,内容无意义随便写,输入y后回车,然后会提示你信息保持一样就再次回车就OK了
- 然后可以看见bin下生成了一个rmi_keystore.jks文件(prowxyserver.jks 是干啥的我不知道,我也不知道咋出来的,后面我给删除了,新下载的包应该是没有的)
- 修改jmeter.properties文件,server.rmi.ssl.disable=false需要开启并改成true
- 然后把这个jmeter.properties文件和生成的rmi_keystore.jks文件拷到对应的执行机的bin下进行替换
4. 负载机的配置
- 在上面的基础上,Windows下的负载机继续打开jmeter.properties文件,remote_hosts后面添加远程的执行机的ip
格式:remote_hosts=save1ip,save2ip(有几个save机就添加几个ip)注意:server_port可以不打开,默认就是1099
5. 执行机在jmeter/bin下启动服务./jmeter-server
,如下图启动成功
6. 负载机启动jmeter.bat,远程调用执行机
- 负载机执行情况
- 执行机运行情况
到这里说明我们Windows做负载机,linux做执行机调用成功!
注意:如果遇到jmeter客户端在点击调用远程后就卡很久很久很久很久,执行机上运行情况
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.1.240:46936](local),objID:[1929906a:1686041725f:-7fff, 327233882577119679]]]
Starting the test on host 192.168.1.240 @ Fri Jan 18 17:24:44 CST 2019 (15478034 84879)
这说明,你负载机调用执行机成功了,但是执行机返回执行结果的时候找不到负载机,
解决方法:
方案一:进入jmeter的bin目录下,按住shift点击鼠标右键,在此处打开窗口
执行jmeter -Djava.rmi.server.hostname=192.168.1.182(改成window负载机的ip,和linux一个网段的ip)
以这种方式打开jmeter,linux执行机就能找到负载机返回解决
方案二:修改jmeter.bat启动文件
找到bin目录下的jmeter.bat,编辑它
Jmeter4.0如果没有做过修改,默认是图里的配置
改为
代码如下:
set rmi_host=-Djava.rmi.server.hostname=192.168.1.182(改成window调度机的IP)
set ARGS=%JAVA9_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE% %RUN_IN_DOCKER% %rmi_host%
搞定了我们来看看原理
这种情况一般会出现在电脑里有多块网卡的情况
Windows调度机的jmeter启动的时候没有使用我们需要的网卡的ip,负载机找不到调度机,所以各种问题就出现了。
和执行机的jmeter配置:
打开jmeter/bin目录下的jmeter.properties文件进行编译
调度机配置:remote_hosts=save1ip,save2ip(有几个save机就添加几个ip)注意:server_port可以不打开
server.rmi.ssl.disable=false需要开启并改成true
执行机配置:jmeter.properties文件
server.rmi.ssl.disable=false需要开启并改成true
在执行的时候出现调用成功了,但是数据没有回调或者卡很久的状态,这说明你的执行机找不到调度机的ip,例如下:
解决方法:
修改master机的jmeter.bat启动文件
找到bin目录下的jmeter.bat,编辑它
Jmeter4.0如果没有做过修改,默认是图里的配置
改为
代码如下:
set rmi_host=-Djava.rmi.server.hostname=192.168.1.182(改成window调度机的IP)
set ARGS=%JAVA9_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE% %RUN_IN_DOCKER% %rmi_host%
7. Linux下负载机怎么执行多个调度机
把配置到的负载机的jmeter上传到一台Linux服务器上,配置好jdk和jmeter环境变量
我这里把执行的脚本xxx.jmx文件放在bin下的,bin下也有保存结果的reportdir文件夹,Linux中也是在bin下运行的脚本
linux中执行分布式命令为:
格式:jmeter -n -t 脚本 -R save1ip,save2ip -l 结果保存路径/结果文件名.jtl
实例:jmeter -n -t Steam_1_5_0.jmx -R 10.205.255.242,10.205.255.241 -l ./xxx/xxx.jtl
或者只需要在聚合报告里填写一个相对路径和结果文件名称.jtl,然后上传到linux的负载机,只要运行jmeter -n -t 脚本 -R save1ip,save2ip
jmeter会按照写的路径给你保存结果