Jmeter分布式测试

在使用Jmeter做并发测试的时候,可能由于控制机的性能不足,难以完成任务。比如后台服务器可以承担的最大并发数50000,结果,运行Jmeter的Master设备在发送50000并发的时候自己先宕机了。为了解决这个现象,我们就必须寻找压测奴隶帮我们解决任务,Jmeter控制机控制其他多台电脑一起发送50000请求到后台服务器,这样就完美解决了问题。
我们先来看一下整体的思路。


Jmeter分布式测试_第1张图片
image.png

<本次配置>

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)

image

2. 上传JMeter至服务器

1)预先将apache-jmeter-4.0.zip压缩包上传至Linux服务器,如/usr/local/jmeter目录下(预先在/usr/local目录下创建jmeter目录:mkdir jmeter)

2)解压:unzip apache-jmeter-4.0.zip

image

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

Jmeter分布式测试_第2张图片
image

4. 启动jmeter-server

路径切换:cd /usr/local/jmeter/apache-jmeter-4.0/bin

操作命令:jmeter-server或./jmeter-server

Jmeter分布式测试_第3张图片
image

启动jmeter-server服务,若出现以下异常:

image

解决方案 ==>[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,即可正常启动

image

若出现以下异常:

"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

image

3)查看文件权限:ls -la

确保startAgent.sh具有可执行权限

Jmeter分布式测试_第4张图片
image

4)启动ServerAgent:./startAgent.sh

ServerAgent默认监听4444端口,如下:

image

三、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

Jmeter分布式测试_第5张图片
image

4. 启动JMeter GUI工具

启动程序:jmeter.bat

路径:E:\CI_Env\apache-jmeter-4.0\bin

Jmeter分布式测试_第6张图片
image

四、执行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}

Jmeter分布式测试_第7张图片
image
Jmeter分布式测试_第8张图片
image
Jmeter分布式测试_第9张图片
image

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服务器执行测试

Jmeter分布式测试_第10张图片
image

2)设置:线程数、循环数、定时场景,启动测试

本次选定执行方式:Run --> Remote Start All

配置线程、循环次数(Step1配置)、定时等的设置,开启执行测试,效果如下:

Jmeter分布式测试_第11张图片
image
Jmeter分布式测试_第12张图片
image

PerfMon Metrics Collector:监控服务器资源

Jmeter分布式测试_第13张图片
image

Hits per Second

Jmeter分布式测试_第14张图片
image

你可能感兴趣的:(Jmeter分布式测试)