本文会完整讲解环境搭建+配置+启动常见问题,适合新手查看,一步步操作,百分百能成功!
一、使用场景
单台的JMeter压测能力有限,最大并发压测在1k内的,单机基本满足日常需求了。但对于有项目来说,需要上万并发的压测,那就需要采用JMeter的分布式压测。
二、Jmeter分布式执行原理
1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。
2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,个人理解它是通过命令行模式执行的。
3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总(也就是说聚合报告会在你的master上面统一展示,但是仅显示结果是否成功,不会显示Response Body返回数据)。
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),解压到该目录
解压完成之后,我们要配置下环境变量,通过 vim
命令修改配置文件 /etc/profile
来设置环境变量。
vim /etc/profile
在文件最后一行,输入i
进入编辑模式,添加以下内容,然后按Esc
退出编辑模式,再输入:wq
保存并退出。
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版本
,代表安装成功
2、安装Jmeter
JMeter安装包不区分win和Linux版本,可以直接使用win中的版本
安装版本:Jmeter5.0
最新版本下载地址: https://jmeter.apache.org/download_jmeter.cgi
历史版本下载地址: https://archive.apache.org/dist/jmeter/binaries/
下载后解压即可,目录:/usr/jmeter
同JDK一样,要配置下环境变量,通过 vim 命令修改配置文件 /etc/profile 来设置环境变量。
vim /etc/profile
在文件最后一行,输入i进入编辑模式,添加以下内容,然后按Esc退出编辑模式,再输入:wq保存并退出。
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版本,验证安装成功。
启动JMeter命令:jmeter.sh
到这里Jmeter安装完成了,下面就是配置master和slave的过程
三、JMeter实现分布式并发
配置步骤:
1、master端配置
路径:bin/jmeter.properties,搜索到remote,修改如下图
其中ip地址是我虚拟机自己设置的固定ip(强烈建议配置固定ip,防止后期连接不上报错,固定ip不会配置的见CC是谁:Linux虚拟机配置静态ip),端口也是在虚拟机配置文件中自己配置的,后面会讲
需要将remote_hosts中的127.0.0.1删除,否则“远程启动所有”时启动不起来
设置成功后在master端看到远程启动中包含了刚才配置的slave,如果看不到可以重启下JMeter
2、slave端配置
路径:bin/jmeter.properties,搜索到1099,启用端口,保存
3、slave端启动Jmeter-server(bin目录下)
注意:命令jmeter-server报错
修改命令为,后面ip是本机的ip,再次启动,成功:
./jmeter-server -Djava.rmi.server.hostname=192.168.8.14
4、master执行
配置了多台slave时,直接“远程启动所有”,所有远程服务器会同时启动
注意:若需要压测100,在10台机器,则线程设置10即可,jmeter执行中不会自动负载均衡,每一台服务器都会完整地运行测试计划。
执行时常见问题汇总
4.1下图代表拒绝连接,slave需要关闭防火墙
命令:
1) Linux操作系统中永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
4.2
解决办法是配置master端的jmeter.properties 文件里的下面配置为true
4.3
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