在使用Jmeter做并发测试的时候,可能由于控制机的性能不足,难以完成任务。比如后台服务器可以承担的最大并发数50000,结果,运行Jmeter的Master设备在发送50000并发的时候自己先宕机了。为了解决这个现象,我们就必须寻找压测奴隶帮我们解决任务,Jmeter控制机控制其他多台电脑一起发送50000请求到后台服务器,这样就完美解决了问题。
我们先来看一下整体的思路。
<本次配置>
Master机:Windows物理机
Slave机:Linux虚拟机;Windows物理机
Server:Linux虚拟机(被测服务器)
一、预先准备工作
1. Linux服务器环境(LAMP)搭建
CentOS7安装PhpStudy,搭建Linux服务器环境(LAMP+LNMP)
CentOS7安装PhpStudy+ECShop要点 & 异常处理
2. Linux服务器资源监控
1)Linux服务器资源监控
使用Nmon ==>Linux性能监控工具Nmon的安装使用、生成数据报告
(可联合JMeter插件工具、以及Linux自带的top命令实时监控)
2)MySQL数据库服务器监控
使用Spotlight ==>数据库性能监控工具Spotlight on MySQL的安装
二、 Linux服务器(Slave机)配置JMeter运行&监听环境
1. 安装JAVA环境
Master机和Slave机都需要安装相同版本的JAVA环境(如:JDK 8),并配置环境变量。如:Linux系统中安装JDK ==>CentOS7系统中安装JDK8-过程记录
JAVA目录位置:/usr/local/java(预先在/usr/local目录下创建java目录:mkdir java)
2. 上传JMeter至服务器
1)预先将apache-jmeter-4.0.zip压缩包上传至Linux服务器,如/usr/local/jmeter目录下(预先在/usr/local目录下创建jmeter目录:mkdir jmeter)
2)解压:unzip apache-jmeter-4.0.zip
3. 配置JMeter环境变量
以命令vi /etc/profile打开环境变量配置文件,在配置文件内接近末尾位置添加以下内容,如下:
---Set JMETER Environment---JMETER_HOME=/usr/local/jmeter/apache-jmeter-4.0PATH=JMETER_HOME/binexportJMETER_HOME PATH# ---Set JMETER Environment---
保存以上配置内容,然后使环境变量生效:source /etc/profile
查看JMeter配置版本:jmeter -v
4. 启动jmeter-server
路径切换:cd /usr/local/jmeter/apache-jmeter-4.0/bin
操作命令:jmeter-server或./jmeter-server
启动jmeter-server服务,若出现以下异常:
解决方案 ==>[JMeter]...java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address_解决方案
具体操作:编辑jmeter-server文件,将服务器的主机IP设置为固定值(与Linux服务器ifconfig查询出的实际IP保持一致)
One way to fix this is to define RMI_HOST_DEF belowRMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.248.138
然后再次启动jmeter-server,即可正常启动
若出现以下异常:
"Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
An error occurred: Listen failed on port: 0; nested exception is:
java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)"
则修改jmeter.properties文件为如下:
Set this if you don't want to use SSL for RMIserver.rmi.ssl.disable=true
5. 上传ServerAgent至服务器,启动监控服务器资源
1)将ServerAgent-2.2.1.zip压缩包上传至Linux服务器,如/usr/local/server-agent目录下(预先在/usr/local目录下创建server-agent目录:mkdir server-agent)
2)解压:unzip ServerAgent-2.2.1.zip
3)查看文件权限:ls -la
确保startAgent.sh具有可执行权限
4)启动ServerAgent:./startAgent.sh
ServerAgent默认监听4444端口,如下:
三、Windows主控机(Master机)配置JMeter运行&监听环境
1. 预先安装JAVA和JMeter
在Windows主控机中,提前安装好与Linux服务器相同版本的JAVA、JMeter,并各自配置好系统环境变量
1)JAVA环境变量:
JAVA_HOME:C:\Program Files\Java\jdk1.8.0_91(JDK安装的目录)
Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;(最前面有一个点.)
2)JMeter环境变量:
JMETER_HOME:E:\CI_Env\apache-jmeter-4.0
PATH:%JMETER_HOME%\bin;
2. 配置远程主机地址
配置文件:jmeter.properties
配置JMeter的bin目录(E:\CI_Env\apache-jmeter-4.0\bin)下的jmeter.properties文件,添加remote_hosts远程地址和端口(Slave机对应的IP,默认端口1099),如下:
Remote Hosts - comma delimited#remote_hosts=127.0.0.1#remote_hosts=localhost:1099,localhost:2010remote_hosts=192.168.248.138:1099,127.0.0.1:1099
3. 启动jmeter服务
双击运行jmeter-server.bat,与Linux服务器(Slave机)保持通信联通
路径:E:\CI_Env\apache-jmeter-4.0\bin
4. 启动JMeter GUI工具
启动程序:jmeter.bat
路径:E:\CI_Env\apache-jmeter-4.0\bin
四、执行JMeter分布式测试
1. 预先准备:录制测试脚本
==>[JPT_05]性能测试-脚本开发(登录&随机购买业务)
2. 对测试脚本进行参数配置,调试脚本
利用Badboy录制脚本,导入到JMeter的GUI操作界面中进行脚本调试
变量设置:
【User Defined Variables】
设置参数:host=192.168.248.138(本次Linux服务器的IP)
参数引用:
ServerName or IP:${hosts}
Host / IP:${hosts}
PS:-----【Important!】-----
【1】脚本中定义变量host,目的是为了便于脚本的复用和移植。当服务器IP变更时,只需要在【User Defined Variables】配置元件中将host取值修改,其他关联引用host的位置也会自动获取该值,而不需要每个位置都手动去修改,存在耗费时间且可能修改遗漏的风险。
【2】连接Linux服务器时,为了确保正常执行测试,每个请求中涉及url地址的Path路径需要大小写严格书写(与Linux服务器中配置的url保持一致)。
【3】对于JMeter4.0,若要使得其性能监控插件可正常监控展示出图像曲线,在执行测试之前,需要在【Write results to file / Read from file】的Filename选择框中添加某个自定义的jtl文件的绝对路径,如:E:\CI_Env\JM_LogResult\123.jtl(存放jtl文件的目录已提前创建好,初始时jtl文件可不存在,执行测试完成之后即会生成与自定义相同名称的jtl文件)。
【4】JMeter脚本中若包含有【CSV Data Set Config 】配置元件配置了csv参数化的文件,需要将该参数化的文件分别上传到每一台Slave机的JMeter的bin目录下存放(与jmeter-server服务文件在同一目录),同时Master机也需要存放该参数化文件到JMeter的bin目录下;然后在JMeter的GUI界面中【CSV Data Set Config 】配置Filename为相对路径(如:username.txt),不宜采用绝对路径,否则执行测试可能异常(可查看Linux服务器中的jmeter-server.log日志文件),测试过程中Linux服务器中的测试数据可能不会返回到Windows主控机的JMeter界面中展示。
具体可参看 ==>JMeterThread:Test failed! java.lang.IllegalArgumentException: File...must exist and be readable_解决方案
3. 执行JMeter分布式测试
1)执行方式选择
【1】Run --> Remote Start --> 192.168.248.138:1099
【2】Run --> Remote Start --> 127.0.0.1:1099
【3】Run --> Remote Start All
【4】Run --> Start
<1> 调用Slave机(远程Linux服务器)上JMeter的Non-GUI模式执行测试
<2> 调用Slave机(此处Master机本身也作为Slave机之一)执行测试
<3> 调用所有配置过的Slave机器执行测试
<4> 常规的执行测试方式,以当前Master机对Linux服务器执行测试
2)设置:线程数、循环数、定时场景,启动测试
本次选定执行方式:Run --> Remote Start All
配置线程、循环次数(Step1配置)、定时等的设置,开启执行测试,效果如下:
PerfMon Metrics Collector:监控服务器资源
Hits per Second