前言
控制机称为调度机(master),被控制机(服务机器)称为执行机(slave)。
无论执行机是windows系统还是linux系统,首先要配置好java环境和jmeter环境(ps: 建议jdk1.8版本,jmeter3.x版本,master机和slave执行机最好安装在相同的目录下安装相同的jmeter版本和jdk版本,避免因为版本不同而发生错误)
前提条件:
1、关闭防火墙(windows 和 linux 防火墙关闭方法,自行百度)
2、所有客户端在同一个子网里
3、内网环境:服务端也和客户端在同一个子网里面
4、外网环境:压力测试瓶颈大多都在带宽上,需要保证压力机带宽要比服务器的带宽高,不然压力上不去(建议一般压测都是用内网)
5、各个机器在相同的目录下安装相同版本的jmeter
6、各个机器在相同目录下安装相同版本的JDK
7、如果脚本涉及读取外部参数化文件(csv),需要将文件上传每个执行机(slave)上
环境:
两台windows机器,一台master机器 一个slave机器(linux机器同理)
环境变量配置
java环境变量配置 windows和linux如下:
地址:https://blog.csdn.net/qq_42236715/article/details/116498430
jmeter环境变量配置 windows和linux如下:
地址:https://blog.csdn.net/liao_11/article/details/124651040
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,它是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
二、master机器配置(windows系统为例):
1、将jmeter装入Linux服务器中,这个时候可以注意一下,master机和执行机最好安装相同的jmeter和JDK版本,避免因为版本不同而发生错误
2、安装完成后进入jmeter目录下的bin目录中,打开jmeter.properties文件,在jmeter.properties文件中新增remote_host配置,配置是执行机(slave)主机的IP和端口号(默认端口为1099,可以自定义修改)多个slave机以逗号,分割(ps:因为我的master机也作为执行机,所以也要加在这里)
3、进入jmeter目录下的bin目录中jmeter.bat文件中新增set_rmi_host=-Djava.rmi.server.hostname=本机ip (查看本机ip: ipconfig / ifconfig)
4、进入jmeter目录下的bin目录中修改jmeter.properties配置,添加一行server.rmi.ssl.disable=true 保证远程连接通
三、slave机器配置(windows系统为例):
1、安装完成后进入jmeter目录下的bin目录中,打开jmeter.properties文件,在jmeter.properties文件中新增remote_host配置,配置是执行机(slave)主机的IP和端口号(默认端口为1099,可以自定义修改)
2、 进入jmeter目录下的bin目录中jmeter.bat文件中新增set_rmi_host=-Djava.rmi.server.hostname=本机ip (查看本机ip: ipconfig / ifconfig)
3、入jmeter目录下的bin目录中修改jmeter.properties配置,添加一行server.rmi.ssl.disable=true 保证远程连接通
如果需要多台slave机器,则重复上述步骤即可
Linux: 启动bin目录下的jmeter-server文件
windows:启动bin目录下的jmeter-serve.bat文件
(ps:我的master机作为执行机也要启动jmeter-server.bat文件)
4、这个时候在jmeter内就可以看到已经添加成功了,点击运行–>远程启动
远程启动报错,连接失败。解决方法
1)看能ping不通。
2)防火墙没有关闭了吗
3)查看网络是否在同一个子网
四、修改slave机器端口:
1、jmeter默认使用的端口是1099,如果你的机器上1099端口已经被其他应用给占用了,就需要修改jmeter的使用端口。
在slave机器中的jmeter.properties
文件中找到server_port,将它后面的端口号修改为你想要的端口
然后再将server.rmi.localport后面的端口号修改与上面相同,保存文件,重新启动jmeter服务即可
2、修改了slave机器的端口需要在master机器上对应修改配置的slave服务,将jmeter.properties文件中remote_hosts后的IP地址机端口修改为slave机器 新的IP和端口,保存文件,重启jmeter即可。
五、补充说明:
如果你的机器内包含多个网卡,为了确保在指定的IP上进行发送和接收信息,需要为jmeter配置指定的IP
1、修改slave服务器上的jmeter-server文件,修改修改RMI_HOST_DEF=-Djava.rmi.server.hostname=slave主机ip
2、修改master服务器的jmeter.bat文件,新增set rmi_host=-Djava.rmi.server.hostname=maste主机ip;重启服务即可。
在进行分布式配置前,需要确保各个服务器之间可以互相ping或telnet,不然会影响发送和接收相关信息
使用多个Linux服务器时,尽量保证多个服务器的时区相同,不然返回的结果时间可能会存在误差
分布式并不是将一个jmeter脚本的请求分送给各个slave机器执行,而是在多个slave机器上同时执行jmeter脚本请求,所以如果线程为10,循环为1,请求为1,slave服务器为2台,那么两台机器同时启动所发送的请求为1012=20次。
如果你的jmeter测试脚本需要调用外部变量即csv文件等,需要将csv文件赋值到各个slave机器上的相同路径下,不然在slave机器运行时会取不到数据。
六、Jmeter对被压测服务器状态实时监听:
客户端:
1、下载插件:JMeterPlugins-Extras.jar、JMeterPlugins-Standard.jar
2、将JMeterPlugins-Extras.jar和JMeterPlugins-Standard.jar放到apache-jmeter-3.0\lib\ext目录下,然后重启jmeter
重启你的jmeter,如果能看到图片中的内容说明配置成功了
服务端:
1、下载插件:ServerAgent-2.2.3
下载地址:https://jmeter-plugins.org/
2、ServerAgent放在被压测的服务器上,windows服务器中启startAgent.bat,Linux服务器启动startAgent.sh即可,是用来收集服务器相关性能指(cpu、memory、tcp等)、以及jmx等metrics信息,然后通过 TCP or UD协议来发送给jmeter。启动后,默认监听4444端口,ServerAgent是一个文本协议,可以使用任何客户端发送/接收metrics数据信息。(服务器记得关防火墙,或找运维开一个可用的端口)
3、被测服务器上需要有jdk环境(记得安装jdk8),否则serverAgent运行会闪退;
异常处理
1、问题:在linux中启动 ./startAgent.sh 是,可能会提示“bash: ./startAgent.sh: 权限不够
”
解决办法:
cd ServerAgent-2.2.3/
chmod 777 startAgent.sh
./startAgent.sh
2、问题:端口被占用,windows环境下解决方法:
serveragent的默认端口为4444,使用jmeter监听器时,有时即使开启了agent服务也会无法监听,这时候可能是端口被占用了,需要修改端口,那么该如何做呢?
解决办法:
1)cmd命令进入ServerAgent的根目录;
2)在cmd中输入: java -jar ./CMDRunner.jar --tool PerfMonAgent --udp-port 5555 --tcp-port 5555。
编写jemter脚本
编写好一个脚本,但必须是你在云服务部署好的项目,不然你就是做的无用功.
这里用jp@gc - PerfMon Metrics Collector示范一下: