当JMeter处理高并发,当一台机器调了JVM还不够测试时,就可以使用分布式的形式来进行分压,分布式简单的说就是由一台控制机去启动JMeter配置相关参数后,通过java的RMI(Remote Method Invocation)远程到其他机器(执行机)进行负载。
当在处理高并发总是卡住的时候,可先尝试设置JVM(如果还没法解决,就搞个分布式)
打开jmeter.bat 搜set heap
根据自身机器内存来设置虚拟内存即可:(一般别设置太大)
set HEAP=-Xms2g -Xmx8g -XX:MaxMetaspaceSize=8g
分布式部署步骤:
1. 控制机和执行机的JMeter和jdk版本尽量保持一致,环境配置得配好(JMeter5.0,jdk1.8.0)
2. 双击打开控制机中bin目录下的create-rmi-keystore.bat
填写完相关信息后,回车:
回车后,会在bin目录下产生以下文件:
把已生产的 rmi_keystore.jks 文件拷贝到执行机的bin目录下
3. 找到执行机中bin目录下的jmeter.properties,打开jmeter.properties
搜remote_host,取消注释,把后面的IP改为本机IP
搜server_port,默认端口号为1099(在端口没冲突的情况下,可不改;Windows查看1099端口是否被占用: netstat -ano|findstr '1099'),也可以自定义,改为你需要的端口,我这边改成了2099
搜rmi.ssl.disable=false,取消注释,修改false为true,
实际就是修改一下3点:
remote_hosts=192.168.1.197(本机IP)
server_port=2099(端口号)
server.rmi.ssl.disable=true(改false为true)
4. 双击启动jmeter-server.bat ,启动完后如下图:
5. 回到控制机,找到jmeter.properties,和执行机类同,先改两项:
server_port=2099(端口号)
server.rmi.ssl.disable=true(改false为true)
再改remote_hosts=192.168.1.197:2099,192.168.1.122:2099
(有1台执行机ip:端口,1台控制机ip:端口)
若还有更多执行机之间以英文逗号隔开。
把控制机的ip:端口设置进去,当运行的时候也可以把自己的控制机当执行机来运行,这样就能达到2台机器负载。
设置完之后 找到jmeter-server.bat 双击打开
6. 打开jmeter.bat已经设定好的脚本:
(假设设置的线程数是1,那么有N台执行机的话,实际并发数是N*1)
选择远程启动:(进行单个测试)
选择远程启动所有:(所有机器一起启动)
跑完之后,jmeter-server窗口:
控制机显示:
找到 jmeter.properties
取消 mode=Standard 注释 后可在控制机看到响应数据(未取消注释会看不到)
注: 远程时,可以通过jmeter-server.log来查看相关日志信息
若按照以上完全部署正常,但是远程运行执行机时,执行机一直处于
Starting the test on host 192.168.1.197:2099 @ Thu Aug 22 16:00:19 CST 2019 (1566460819634)
可能是因为控制机有多个网卡,可以把网卡都禁用掉之后再尝试。