一般来说,我们在测试服务器性能的时候,只需要本地跑一个Jmeter进程就可以把应用程序的性能上限给压测出来。但那是对普通服务。如果是对高性能服务的话,一台Jmeter机器远远压测不到服务的上限。所以我们需要分布式Jmeter
分布式Jmeter原理
如下图
![](https://img.haomeiwen.com/i5387388/c97fd057b4165165.png)
- Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
- 执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。
- 执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。
不过要注意以下几点:
- 每一台jmeter远程服务器(slave机器)都执行相同的测试计划,jmeter不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划
- 采用JMeter远程模式并不会比独立运行相同数目的非GUI测试更耗费资源。但是,如果使用大量的JMeter远程服务器,可能会导致客户端过载,或者网络连接发生拥塞;
- 默认情况下,master机器是不执行参与生成并发数据的;
- 调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater
环境拓扑结构
如下图:1个master(192.168.171.128) 2个slave(192.168.171.131 192.168.171.133) 这些都是虚拟机ip;
Target是部署于同一个局域网中的UDP服务器(10.100.50.127)
![](https://img.haomeiwen.com/i5387388/08c556c677e9932b.png)
前提条件
- 关闭所有Jmeter宿主机的防火墙
- 所有Jmeter宿主机在同一个局域网中
- 尽量保证所有宿主机的JDK版本以及Jmeter版本是一样的
- Jmeter4.0中需要配置SSL
下面我们来演示一下如何配置SSL
$ cd jmeter/bin
$ ./create-rmi-keystore.sh
What is your first and last name?
[Unknown]: rmi
What is the name of your organizational unit?
[Unknown]: My unit name
What is the name of your organization?
[Unknown]: My organisation name
What is the name of your City or Locality?
[Unknown]: Your City
What is the name of your State or Province?
[Unknown]: Your State
What is the two-letter country code for this unit?
[Unknown]: XY
Is CN=rmi, OU=My unit name, O=My organisation name, L=Your City, ST=Your State, C=XY correct?
[no]: yes
Copy the generated rmi_keystore.jks to jmeter/bin folder or reference it in property 'server.rmi.ssl.keystore.file'
如果是在windows上,则执行bin/create-rmi-keystore.bat。执行完成后会生成一个文件rmi_keystore.jks。圣后这个文件后,保证每一个Jmeter宿主机上都使用的是这个文件
配置环境
所有的宿主机都要安装Jmeter并配置环境变量
1.将Jmeter压缩包上传到所有的宿主机上。解压后的目录为/opt/software/jmeter/apache-jmeter-4.0
![](https://img.haomeiwen.com/i5387388/f4eed8ef284d7e8b.png)
2.配置环境变量
第一步:vi /etc/profile
export JMETER_HOME=/opt/software/jmeter/apache-jmeter-4.0
export PATH=$PATH:$JMETER_HOME/bin
第二步:
source /etc/profile
配置好之后需要测试一下
jmeter -v
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____
/ \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \
/ _ \ | |_) / _ \| | | |_| | _| _ | | |\/| | _| | | | _| | |_) |
/ ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _ <
/_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 4.0 r1823414
Copyright (c) 1999-2018 The Apache Software Foundation
如果提示没有权限,就把bin目录的文件加一下执行权限就好了
配置slave环境
做好上面的两步后,slave只需要启动一下jmeter-server就可以了
[root@wu131 bin]# ./jmeter-server
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.171.131:46530](local),objID:[-4433b170:164ea9464d7:-7fff, 6570738052316875328]]]
配置master环境
- 修改bin/jmeter.properties文件
# Remote Hosts - comma delimited
# 这里配置两个slave的地址,如果资源不够也可以配置master自己的地址,但是master也需要启动jmeter-server
remote_hosts=192.168.171.131:1099,192.168.171.133:1099
#remote_hosts=localhost:1099,localhost:2010
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099
#否则远程执行,会报一个ssl错误
server.rmi.ssl.disable=true
- 配置脚本
由于我需要测试高性能的UDP服务器,所以在这里我下载了UDP插件,并配置8个线程。配置好之后保存并上传到master机器上jmeter中的bin目录。然后执行jmeter -n -t UDP.jmx -r -l result1.jtl (启动所有从机执行脚本)
- -n 表示没有界面的运行
- -t 后面紧跟指定的需要运行的测试case(测试case在windows上用jmeter图形界面事先写好)
- -l 指定了测试报告的文件(也可以指定路径,默认在当前目录下),生成的报告可以保存到本地windows上在jmeter中打开查看。
[root@wu128 bin]# jmeter -n -t UDP.jmx -r -l result1.jtl
Creating summariser <summary>
Created the tree successfully using UDP.jmx
Configuring remote engine: 192.168.171.131:1099
Configuring remote engine: 192.168.171.133:1099
Starting remote engines
Starting the test @ Mon Jul 30 17:56:40 CST 2018 (1532944600189)
Remote engines have been started
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary + 121003 in 00:00:16 = 7465.2/s Avg: 0 Min: 0 Max: 775 Err: 0 (0.00%) Active: 16 Started: 16 Finished: 0
summary + 75374 in 00:00:30 = 2521.4/s Avg: 0 Min: 0 Max: 729 Err: 0 (0.00%) Active: 16 Started: 16 Finished: 0
summary = 196377 in 00:00:47 = 4207.8/s Avg: 0 Min: 0 Max: 775 Err: 0 (0.00%)
summary + 174502 in 00:00:15 = 11746.2/s Avg: 0 Min: 0 Max: 722 Err: 0 (0.00%) Active: 0 Started: 16 Finished: 16
summary = 370879 in 00:01:02 = 6027.9/s Avg: 0 Min: 0 Max: 775 Err: 0 (0.00%)
Tidying up remote @ Mon Jul 30 17:57:45 CST 2018 (1532944665446)
... end of run
也可以指定ip运行
jmeter -n -t UDP.jmx -R 192.168.171.131 -l result1.jtl 指定从机IP
网友评论