实现3000+并发压测,使用Jmeter GUI与CLI模式下实现对云服务器分布式压测配置及常见问题的解决

参考Jmeter官网内容   http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html

了解Jmeter分布压测的原理:

首先,做Jmeter分布压测的注意事项:

1、the firewalls on the systems are turned off or correct ports are opened.(关闭系统上的防火墙或打开正确的端口)

2、all the clients are on the same subnet.  (所有客户端都在同一个子网上)

3、the server is in the same subnet, if 192.x.x.x or 10.x.x.x IP addresses are used. If the server doesn't use 192.xx or 10.xx IP address, there shouldn't be any problems.    

(如果使用192.xxx10.xxx IP地址,则服务器位于同一子网中。如果服务器不使用192.xx10.xxIP地址,则应该没有任何问题)

4、Make sure JMeter can access the server.  (确保JMeter可以访问服务器)

5、Make sure you use the same version of JMeter and Java on all the systems. Mixing versions will not work correctly.

(确保在所有系统上使用相同版本的JMeter和Java。混合版本无法正常工作)

6、You have setup SSL for RMI or disabled it.   (您已为RMI设置SSL或禁用它)

目录

一、环境准备:

二、安装Jmeter和JAVA JDK

三、测试Slave机的环境:

四、配置分布压测的环境:

五、进入测试:


一、环境准备:

Jmeter安装包和JAVA jdk 安装包下载:

链接: https://pan.baidu.com/s/10siiTQ5CPDEU6Bt424Sx7A 提取码: k6qa 

客户端 IP地址 主从 配置环境
Mac 用 ifconfig 查看 Master(控制机) Jmeter 4.0,JAVA  jdk
Ubuntu 16.04 10.211.55.9 Slave(执行机) Jmeter 4.0,JAVA  jdk
CentOS 7 10.211.55.6 Slave(执行机) Jmeter 4.0,JAVA  jdk

二、安装Jmeter和JAVA JDK

在这里我把 Mac 下的 Master也当做从机来处理,接下来就是配置环境,为了方便,3个客户端的配置路径都是一样的,如下:

1、先安装Jmeter:

# 主目录
parallels@ubuntu:/usr/local/software$

# 在当前目录下用下面的命令创建jmeter文件夹: 
sudo mkdir jmeter   

#进入 jmeter 目录:
/usr/local/software/jmeter

# 下载完 jmeter 的安装包后,放入 jmeter 目录后,用下面命令进行解压
tar -zxvf 文件名

          1.1 简单介绍下 jmeter的bin目录下的文件:

bin:是核心可执行文件,包含的配置有:
    jmeter.bat:Windows启动文件
    jmeter:mac或者linux启动文件
    jmeter-server:mac或者Linux分布压测使用的启动文件
    jmeter-server.bat:Windows分布压测使用的启动文件
    jmeter.properties:最核心的配置文件

2、在安装 Java jdk : (JDK建议,不建议单独安装 JRE, 因为我们在压测时需要用到 https,里面的工具需要从 jdk 中获取,如果单独安装 JRE 是没有此工具的哦)

# 主目录
parallels@ubuntu:/usr/local/software$

# 下载完 java jdk 的安装包后,放入 software 目录后,用下面命令进行解压:
tar -zxvf 文件名

# 为了方便,将 JAVA jdk 的文件夹,用下面命令重新命名:
sudo mv 原文件夹名 新文件夹名

      2.1 配置JAVA jdk 的环境变量:(这个根据自己电脑平时配置的环境变量文件去进行配置)

sudo vim /etc/profile

            在文件的末尾添加如下内容

export JAVA_HOME=/usr/local/software/jdk8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

           执行下面的命令,使配置的文件生效:

source /etc/profile

# 使用一下命令查看 JAVA jdk 版本
java -version

            查看版本画面:

   

3、进入主目录并用下面的命令创建一个app文件夹:(这个app文件夹的名字可以随便起,就是用来暂时存放用来测试的一个借口文件而已)

(注:这一步不是必要的操作,因为我们要测的云服务器中的项目,这里是为了测试我们每个客户端的环境是否能正常运行)

[parallels@centos-linux-7 software]$ sudo mkdir app

# 将我们准备好的测试文件放入到app目录中,我这里是从mac电脑中远程复制到每一个虚拟机中:
sudo scp -r 源文件所在路径 从机的用户名@从机的IP地址:/usr/local/software/app

# 执行完后,可以进行查看是否已成功复制
[parallels@centos-linux-7 app]$ ls
gs-spring-boot-0.1.0.jar 

三、测试Slave机的环境:

1、用下面的命令打开Jmeter的GUI界面:

方法一:open /usr/local/Cellar/apache-jmeter-4.0/bin/jmeter

# 上面这种方式打开之后,会伴随着一个黑色的终端窗口也打开

方法二:在 /usr/local/Cellar/apache-jmeter-4.0/bin  目录下找到 ApacheJMeter.jar 包,双击直接打开即可,这种方式打开后不会伴随打开一个黑色的窗口的哦


1.1 打开之后发现是英文界面,我们可以进行如下操作来改变显示的语言方式:

如果没有找中文的显示方式,可以用下面的命令进行编辑:

sudo vim /usr/local/software/jmeter/apache-jmeter-4.0/bin/jmeter.properties

# 找到 language=en  修改为: language=zh_CN   即可

1.2  退出可以直接按 Ctrl + C, 也可以执行如下命令进行退出:

# 查看jmeter的端口号
ps aux | grep jmeter

用 sudo kill -9 端口号 即可

2、进入到测试要测试的app文件夹:

/usr/local/software/app

# 执行下面的命令,查看安装的java jdk 是否能正常执行:
java -jar 测试的文件接口

2.1 可能会报下面的错误:

此时用下面的命令查看java的运行环境和编译环境的版本是否一致:

?,发现两者不一致,什么鬼,这里我采用的是有些暴力的方法,解决方法:

# 先卸载掉系统的编译环境:
sudo yum -y remove java-1.7.0-openjdk* 

# 重新下载和运行环境版本一致的jdk
sudo yum -y install java-1.8.0-openjdk*

再次查看即可:

2.2 这个时候再次执行2.1中的命令,会出现下面的成功画面:

2.3 我们可以让其在后台运行,因为直接运行出来的内容太多了:

nohup java -jar gs-spring-boot-0.1.0.jar

2.4 直接打开浏览器,在地址栏中输入 10.211.55.6:8080/users,就会看到请求接口返回的内容了:

2.5 我们可以打开Jmeter 的 GUI 界面,写一个测试计划,测试一下:

到这里,我们的一台slave机器上的分布压测环境已经配置完毕;接下来就是重复第二步、第三步操作来安装其他的 Slave 机器,确保每台机器的环境尽量保持一致

四、配置分布压测的环境:

4.1  在Master机器上找到安装jmeter的位置:

sudo /usr/local/software/jmeter/apache-jmeter-4.0/bin/jmeter.properties 

# 先输入 /remote_hosts 找到这个位置进行修改,我的修改如下,根据个人电脑的IP进行配置哈,
# 这里我把master也当作了一个Slave,采用的是系统默认的端口:

remote_hosts=127.0.0.1:1099,10.211.55.9:1099,10.211.55.6:1099

其他的Slave机同样进入到各自的目录进行修改:

Ubuntu中: remote_hosts=10.211.55.9:1099

CentOS中: remote_hosts=10.211.55.6:1099

进入到每个机器中 jmeter的bin目录下执行 ./jmeter-server 看能否正常启动,有时会报如下错误:

错误一:

错误的大概意思就是:没有足够的内存让Java运行时环境继续运行

解决方法:

        在bin目录下,输入 sudo vim jmeter 命令进行修改:

在bin目录下再次执行 ./jmeter-server 命令,结果又报错了?:

错误二:

解决方法:

       错误的大概意思就是:jmeter在远程调用的时候需要的一个 rmi 密钥,这里我们不需要,可以在 bin 目录下,输入下面的命令:

sudo vim jmeter.properties

直接输入: /server.rmi.ssl.disable 按回车进行查找,会看到下面的画面

再次在bin目录下执行: ./jmeter-server  发现可以成功运行了:

错误三:(这个是我在启动Ubuntu中的时候遇到的错误)

错误的大概意思就是服务器启动失败:java.rmi。RemoteException:不能开始。ubuntu是一个环回地址。发生错误:无法启动。ubuntu是一个环回地址。这又是什么鬼啊?

但是另一台机器报了如下的错误:

这两个错误的解决方法尝试了好多遍,发现居然是一样的,阿西吧

解决方法一:

      在运行 ./jmeter-server 的时候,直接输入下面的命令即可:

./jmeter-server -Djava.rmi.server.hostname=10.211.55.9

# 后面的IP地址为报错的机器的IP

解决方法二:

  输入 sudo vim /etc/hosts 进入编辑模式,添加如下内容:

127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
::1             localhost localhost.localdomain localhost6 localhost6.localdomain6
10.211.55.9     ubuntu

# 10.211.55.9 为报错机器的IP地址

解决方法三:

在 jmeter 的bin目录下,输入 sudo vim jmeter-server 进入编辑模式,进行如下操作:

我所遇到的问题就这些了,接下来就是进入jmeter的GUI的界面进行简单的测试:

五、进入测试:

如果一些配置成功的话,在GUI界面会看到如下结果:

5.1   同时启动3台 jmeter 服务器

5.2   GUI界面下进行简单的测试:

5.3   CLI 模式下执行3台机器,每台会发送1200次请求到云服务器:

上图为测试计划中的线程组参数;

在Master机器上输入以下命令:

jmeter -n -t 测试计划路径/remote.jmx  -r -l 记录结果路径/jtl/result.jtl -e -o 存放html报告的目录路径/result

# 非GUI界面下的压测参数介绍:
-h 帮助
-n 非GUI模式
-t 指定要运行的 JMeter 测试脚本文件
-l 记录结果的文件 每次运行之前,(要确保之前没有运行过,即xxx.jtl不存在,不然报错)
-r Jmter.properties文件中指定的所有远程服务器
-e 在脚本运行结束后生成html报告
-o 用于存放html报告的目录(目录要为空,不然报错)

CLI模式下仿3600用户压测的示例图:

非GUI界面下的压测最终结果:

根据测试的结果来看,由于网路的原因,有154个请求连接超时被拒绝,错误率为 4.28%

查看生成的分布压测报告,腾讯云3000+非GUI分布压测生成HTML可视化压测报告解读:

注:腾讯云3000+非GUI分布压测生成HTML可视化压测报告解读

发布了37 篇原创文章 · 获赞 63 · 访问量 9692

猜你喜欢

转载自blog.csdn.net/xiao66guo/article/details/91415286