本文会完整讲解环境搭建+配置+启动常见问题,适合新手查看,一步步操作,百分百能成功!
一、使用场景
单台的JMeter压测能力有限,最大并发压测在1k内的,单机基本满足日常需求了。但对于有项目来说,需要上万并发的压测,那就需要采用JMeter的分布式压测。
二、Jmeter分布式执行原理
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,个人理解它是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总(也就是说聚合报告会在你的master上面统一展示,但是仅显示结果是否成功,不会显示Response Body返回数据)。
![b56d87ce05709d17e3c56e5dcfd96822.png](https://img-blog.csdnimg.cn/img_convert/b56d87ce05709d17e3c56e5dcfd96822.png)
Linux虚拟机安装Jmeter
说明:这个是我自己在Linux虚拟机上安装slave的过程,master是在win上已经安装好的。如果可以连接其他服务器的Jmeter,可以忽略此安装步骤。
重点:master和slave上的jdk+jmeter版本最好一致,否则有可能导致无法远程启动
1、安装jdk
JDK是JAVA
的软件开发工具包,如果要使用JAVA来进行开发,或者部署基于其开发的应用,那么就需要安装JDK,JDK包分win和Linux版本。
环境:CentOS 6.8 64位
下载的JDK 1.8.0 版本:jdk-linux-x64.tar.gz
直接通过win下载好,然后通过Xftp传到Linux(路径: /usr/java),解压到该目录
![19091b54b898b6cb757b519c3137e03b.png](https://img-blog.csdnimg.cn/img_convert/19091b54b898b6cb757b519c3137e03b.png)
![be251589f2a9ba71b3bb8bd85f79aa8d.png](https://img-blog.csdnimg.cn/img_convert/be251589f2a9ba71b3bb8bd85f79aa8d.png)
解压完成之后,我们要配置下环境变量,通过 vim
命令修改配置文件 /etc/profile
来设置环境变量。
vim /etc/profile
在文件最后一行,输入i
进入编辑模式,添加以下内容,然后按Esc
退出编辑模式,再输入:wq
保存并退出。
![6e6ee22480129a9b9a8b1c38f8487103.png](https://img-blog.csdnimg.cn/img_convert/6e6ee22480129a9b9a8b1c38f8487103.png)
export JAVA_HOME=/usr/java/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
设置完之后,如果要使环境变量立即生效,需要通过命令:source /etc/profile
,重新加载配置文件。
验证是否安装成功:java -version
不会出现报错并且显示出jdk版本
,代表安装成功
![0ae426f226bfaeb3fea5e5b0750dcafa.png](https://img-blog.csdnimg.cn/img_convert/0ae426f226bfaeb3fea5e5b0750dcafa.png)
2、安装Jmeter
JMeter安装包不区分win和Linux版本,可以直接使用win中的版本
安装版本:Jmeter5.0
最新版本下载地址: https://jmeter.apache.org/download_jmeter.cgi
历史版本下载地址: https://archive.apache.org/dist/jmeter/binaries/
下载后解压即可,目录:/usr/jmeter
![61062da8072b3c73dcc3267ea1314a5b.png](https://img-blog.csdnimg.cn/img_convert/61062da8072b3c73dcc3267ea1314a5b.png)
同JDK一样,要配置下环境变量,通过 vim 命令修改配置文件 /etc/profile 来设置环境变量。
vim /etc/profile
在文件最后一行,输入i进入编辑模式,添加以下内容,然后按Esc退出编辑模式,再输入:wq保存并退出。
![06e8c8a22d06d2bc30d1124cbfda82e5.png](https://img-blog.csdnimg.cn/img_convert/06e8c8a22d06d2bc30d1124cbfda82e5.png)
export JMETER_HOME=/usr/jmeter/apache-jmeter-5.0/apache-jmeter-5.0
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH
设置完之后,如果要使环境变量立即生效,需要通过输入命令:source /etc/profile
,重新加载配置文件。最后,通过jmeter --version
查看安装的Jmeter版本,验证安装成功。
![066c1b419d9133a06e8a833bf0307421.png](https://img-blog.csdnimg.cn/img_convert/066c1b419d9133a06e8a833bf0307421.png)
启动JMeter命令:jmeter.sh
![d1f930e5f8091e1dac24e33d2be21309.png](https://img-blog.csdnimg.cn/img_convert/d1f930e5f8091e1dac24e33d2be21309.png)
到这里Jmeter安装完成了,下面就是配置master和slave的过程
三、JMeter实现分布式并发
配置步骤:
![34c7456a223fbabcf057c44e895ea7bd.png](https://img-blog.csdnimg.cn/img_convert/34c7456a223fbabcf057c44e895ea7bd.png)
1、master端配置
路径:bin/jmeter.properties,搜索到remote,修改如下图
其中ip地址是我虚拟机自己设置的固定ip(强烈建议配置固定ip,防止后期连接不上报错,固定ip不会配置的见CC是谁:Linux虚拟机配置静态ip),端口也是在虚拟机配置文件中自己配置的,后面会讲
需要将remote_hosts中的127.0.0.1删除,否则“远程启动所有”时启动不起来
![572d470bddc84bd31116dcd253af756b.png](https://img-blog.csdnimg.cn/img_convert/572d470bddc84bd31116dcd253af756b.png)
设置成功后在master端看到远程启动中包含了刚才配置的slave,如果看不到可以重启下JMeter
![60bdb72107993cf6d50c5f67ef096aa6.png](https://img-blog.csdnimg.cn/img_convert/60bdb72107993cf6d50c5f67ef096aa6.png)
2、slave端配置
路径:bin/jmeter.properties,搜索到1099,启用端口,保存
![530358a69f8e57ea9f66aaff4e5fcd3b.png](https://img-blog.csdnimg.cn/img_convert/530358a69f8e57ea9f66aaff4e5fcd3b.png)
3、slave端启动Jmeter-server(bin目录下)
![c8750c39e24fcd04681e345914441b33.png](https://img-blog.csdnimg.cn/img_convert/c8750c39e24fcd04681e345914441b33.png)
注意:命令jmeter-server报错
![114251e913d2aa11339fc27ddb05bb59.png](https://img-blog.csdnimg.cn/img_convert/114251e913d2aa11339fc27ddb05bb59.png)
修改命令为,后面ip是本机的ip,再次启动,成功:
./jmeter-server -Djava.rmi.server.hostname=192.168.8.14
![cad4d566e7ac9f5be5a4b18b86cc2828.png](https://img-blog.csdnimg.cn/img_convert/cad4d566e7ac9f5be5a4b18b86cc2828.png)
4、master执行
配置了多台slave时,直接“远程启动所有”,所有远程服务器会同时启动
注意:若需要压测100,在10台机器,则线程设置10即可,jmeter执行中不会自动负载均衡,每一台服务器都会完整地运行测试计划。
![0d9448ef27f5cae3e0e5a1e2ce8291dc.png](https://img-blog.csdnimg.cn/img_convert/0d9448ef27f5cae3e0e5a1e2ce8291dc.png)
执行时常见问题汇总
4.1下图代表拒绝连接,slave需要关闭防火墙
![e51ca51f8c980b63c22c9fcc43967a1f.png](https://img-blog.csdnimg.cn/img_convert/e51ca51f8c980b63c22c9fcc43967a1f.png)
命令:
1) Linux操作系统中永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
4.2
![bb850c228da76a7aee12d5813837333c.png](https://img-blog.csdnimg.cn/img_convert/bb850c228da76a7aee12d5813837333c.png)
解决办法是配置master端的jmeter.properties 文件里的下面配置为true
![dd887582fb6477063cb387b1a8e264f1.png](https://img-blog.csdnimg.cn/img_convert/dd887582fb6477063cb387b1a8e264f1.png)
4.3
![4a5ef6aeb9187fd464dc9e3498384cab.png](https://img-blog.csdnimg.cn/img_convert/4a5ef6aeb9187fd464dc9e3498384cab.png)
RROR - jmeter.gui.action.RemoteStart: Failed to initialise remote engine java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is:
java.net.ConnectException: Connection refused: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at org.apache.jmeter.engine.ClientJMeterEngine.getEngine(ClientJMeterEngine.java:54)
at org.apache.jmeter.engine.ClientJMeterEngine.<init>(ClientJMeterEngine.java:67)
at org.apache.jmeter.gui.action.RemoteStart.doRemoteInit(RemoteStart.java:180)
at org.apache.jmeter.gui.action.RemoteStart.doAction(RemoteStart.java:80)
at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:81)
解决方法:只要将本机的jmter-server.bat执行即可。master要是在jmeter.properties配置的地方写了127.0.0.1 的话 就要开本机的 jmeter-sever.bat. 不写的话,就不用开了
参考:
Fresh.Qin:Jmeter--分布式测试配置zhuanlan.zhihu.com![0c6d7feba06126ead152f9bc96b625eb.png](https://img-blog.csdnimg.cn/img_convert/0c6d7feba06126ead152f9bc96b625eb.png)
![d4dfa025aba2fbd2341c8c88a4c9a095.png](https://img-blog.csdnimg.cn/img_convert/d4dfa025aba2fbd2341c8c88a4c9a095.png)