目录
1、JMeter分布式测试
-
分布式运行
-
是指用JMeter控制机控制远程多台负载机来产生负载
-
应用场景?
-
当性能测试的时候需要的负载【用户/请求】太高,一台测试机无法模拟的时候
-
一个JMeter支持1000 ~ 1500并发左右
-
就可以使用多台测试机来一起模拟需要达到要求的负载量
-
同时,被测应用与测试机/负载机一般位于同一个网段,这样能减少网络带宽的消耗,测试结果更真实
-
这就是分布式
-
-
-
JMeter控制机与远程负载机是通过RMI方式通信的
-
需要在负载机上运行Agent程序【jmeter-server】
-
-
JMeter控制机
-
运行JMeter GUI的系统,用于控制测试
-
-
JMeter负载机
-
干活的,运行jmeter-server的系统
-
从控制机接收命令并将请求发送到目标测试系统
-
-
目标测试系统
-
就是被测服务器,计划进行压力测试的服务,如web服务器
-
-
控制机配置
-
~JMETER_HOME/bin/jmeter.properties文件
-
修改remote_hosts = 127.0.0.1为负载机地址,用","分割
-
如 remote_hosts = 192.168.0.100:1099,192.168.0.101:1099,192.168.0.102:1099
-
-
启动JMeter
-
-
负载机配置
-
负载机上,执行 ~JMETER_HOME/bin/jmeter-server.bat 【或者jmeter-server】
-
-
JMeter分布式测试注意事项:
-
1)防火墙关闭了,或者开放了对应的端口(如果你没有设置,那么是有个默认端口的)
-
2)所有的客户端在同一个网络
-
3)确保JMeter可以访问服务器
-
4)所有机器的JMeter版本和JDK版本,必须保持一致
-
5)已经为RMI设置了SSL或者将其禁用
-
-
开始负载测试前,可以查看控制机上的jmeter.log
-
查看是否有相关分发到负载机进行测试的信息
-
-
控制机和负载机的SSL配置
-
当然目前来说,建议禁用SSL配置
-
从JMeter4.0开始,RMI的默认传输机制使用SSL。
-
SSL需要密钥和证书才能起作用,如果启用SSL,需要配置控制机和负载机的SSL密钥
-
%JMETER_HOME%/bin/目录中,包含用于生成名为rmi的密钥(及其证书)的密钥库的脚本create-rmi-keystore.bat/create-rmi-keystore.sh
-
运行上述脚本,生成 rmi_keystore.jks keystore在bin目录下
-
控制机生成这个文件,然后拷贝到所有负载机的JMeter的bin目录下
-
-
注意,默认的有效期是7天。
-
-
-
还需要配置jmeter.properties文件,启用ssl
-
启动:
-
控制机:
-
如果配置好了,会多出远程负载机的地址
-
-
-
负载机
-
要启动jmeter-server.bat 【或者 jmeter-server】
-
2、操作
-
负载机:
-
负载机上安装jdk、jmeter
-
修改配置,关闭ssl,放开1099端口
-
启动jmeter-server
-
# /etc/profile
77 export JAVA_HOME=/usr/java/jdk1.8.0_181
78 export JMETER_HOME=/usr/local/apache-jmeter-5.4.1
79 export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:.
80 export PATH=$PATH:$JAVA_HOME/bin:$JMETER_HOME/bin
[root@xxx bin]# which java
/usr/java/jdk1.8.0_181/bin/java
[root@xxx bin]# which jmeter
/usr/local/apache-jmeter-5.4.1/bin/jmeter
[root@xxx bin]#
[root@xxx bin]# vim jmeter.properties
267 # Remote Hosts - comma delimited
268 remote_hosts=127.0.0.1
269 #remote_hosts=localhost:1099,localhost:2010
270
271 # RMI port to be used by the server (must start rmiregistry with same port)
272 server_port=1099
343 #
344 # Set this if you don't want to use SSL for RMI
345 server.rmi.ssl.disable=true
346 #---------------------------------------------------------------------------
347 # Include Controller
348 #---------------------------------------------------------------------------
349
# 启动jmeter-server
[root@xxx bin]# ./jmeter-server
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.0.110:35752](local),objID:[-19d27740:1834f2d850a:-7fff, 3051356038780794490]]]
Starting the test on host 192.168.0.110:1099 @ Sun Sep 18 14:02:38 CST 2022 (1663480958954)
Finished the test on host 192.168.0.110:1099 @ Sun Sep 18 14:02:39 CST 2022 (1663480959955)
Starting the test on host 192.168.0.110:1099 @ Sun Sep 18 14:03:03 CST 2022 (1663480983484)
Finished the test on host 192.168.0.110:1099 @ Sun Sep 18 14:03:04 CST 2022 (1663480984593)
-
控制机配置:
-
也是关闭ssl配置
-
server.rmi.ssl.disable=true
-
-
添加负载机调用地址
-
remote_hosts=192.168.0.110:1099,192.168.0.111:1099,192.168.0.112:1099
-
-
# 控制机配置
# xxx @ xxxdeMacBook-Pro in ~/Software/apache-jmeter-5.4.1/bin [14:08:35]
$ vim jmeter.properties
345 #
346 # Set this if you don't want to use SSL for RMI
347 #server.rmi.ssl.disable=false
348 server.rmi.ssl.disable=true
349 #---------------------------------------------------------------------------
350 # Include Controller
351 #---------------------------------------------------------------------------
352
264 #---------------------------------------------------------------------------
265 # Remote hosts and RMI configuration
266 #---------------------------------------------------------------------------
267
268 # Remote Hosts - comma delimited
269 #remote_hosts=127.0.0.1
270 remote_hosts=192.168.0.110:1099,192.168.0.111:1099,192.168.0.112:1099
271 #remote_hosts=localhost:1099,localhost:2010
272
273 # RMI port to be used by the server (must start rmiregistry with same port)
274 server_port=1099
275
-
启动
-
启动控制机,并且观察负载机上日志
-
3、负载机启动报错问题
-
如果报错,如下
[root@ksie5mpd1rte5e2b bin]# ./jmeter-server
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[127.0.0.1:42875](local),objID:[4887b48a:188f6da96fe:-7fff, 6493286691729345055]]]
Server failed to start: java.rmi.RemoteException: Cannot start. ksie5mpd1rte5e2b is a loopback address.
An error occurred: Cannot start. ksie5mpd1rte5e2b is a loopback address.
-
需要修改~JMETER_HOME/bin/jmeter-server文件
-
把 RMI_HOST_DEF 这个注释放开,并填上自己的ip地址
-
# One way to fix this is to define RMI_HOST_DEF below
#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
RMI_HOST_DEF=-Djava.rmi.server.hostname=101.91.201.211
-
再重新启动负载机即可