压力测试工具Apache JMeter:6:搭建分布式测试环境

原文: 压力测试工具Apache JMeter:6:搭建分布式测试环境

在这里插入图片描述
Apache JMeter是一个纯Java开发的用于负载测试或者性能测试的开源软件。这篇文章通过具体的测试示例来介绍一下如何使用JMeter搭建分布式测试环境,并结合一个具体的示例来展示以下在JMeter分布式环境中执行压力测试的方法。

环境准备

关于Apache JMeter的概要介绍与安装的方法,可参看如下内容:

  • https://liumiaocn.blog.csdn.net/article/details/101264380

分布式测试

和其他主从式设计一样,二者各司其职,如下图所示,Master节点负责控制与转发, Slave节点负责执行。
压力测试工具Apache JMeter:6:搭建分布式测试环境_第1张图片

环境设定

  • 主机环境
liumiaocn:apache-jmeter-5.1.1 liumiao$ uname -a
Darwin liumiaocn 18.0.0 Darwin Kernel Version 18.0.0: Wed Aug 22 20:13:40 PDT 2018; root:xnu-4903.201.2~1/RELEASE_X86_64 x86_64
liumiaocn:apache-jmeter-5.1.1 liumiao$

   
   
   
   
  • 1
  • 2
  • 3

注:由于是Java的应用,主机的环境理论上来说不会造成影响。

  • 分布式测试环境
    本文使用一个Master节点,3个Slave节点形成的1主三从的分布式测试环境,为了简单演示使用的是同一台机器,具体构成如下所示
类型 IP 端口 说明
Master节点 192.168.31.242 - 用于控制的Master节点
Slave节点-1 192.168.31.242 31099 用于进行压测的Slave节点1
Slave节点-2 192.168.31.242 31020 用于进行压测的Slave节点2
Slave节点-3 192.168.31.242 31021 用于进行压测的Slave节点3

Slave节点设定与启动

在JMeter的bin目录下,有名为jmeter-server(linux或unix下的执行脚本)和名为jmeter-server.bat(windows下的执行脚本),直接使用此文件即可,但是实际上在目前的这个版本中,这个脚本仍然非常之简单,是调用jmeter脚本更为直接和灵活,以jmeter-server为例进行说明:

liumiaocn:bin root# tail -n1 jmeter-server
${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j jmeter-server.log "$@"
liumiaocn:bin root# 

   
   
   
   
  • 1
  • 2
  • 3

可以看到,其实这个脚本就是通过执行jmeter指定server_port和java.rmi.server.hostname的一个封装,而且日志的名称和路径都写死在了当前目录下,所以实际使用的时候建议直接使用如下命令启动Slave节点的JMeter

启动命令:jmeter -Djava.rmi.server.hostname=机器名或者IP地址 -Dserver_port=端口号 -s -j 日志文件名称

在本文的示例中,只需要分别在启动如下三个jmeter的Slave压测实例即可:

  • Slave节点-1

启动命令:bin/jmeter -Djava.rmi.server.hostname=192.168.31.242 -Dserver_port=31099 -s -j /tmp/jmeter-slave-1.log

  • Slave节点-2

启动命令:bin/jmeter -Djava.rmi.server.hostname=192.168.31.242 -Dserver_port=31020 -s -j /tmp/jmeter-slave-2.log

  • Slave节点-3

启动命令:bin/jmeter -Djava.rmi.server.hostname=192.168.31.242 -Dserver_port=31021 -s -j /tmp/jmeter-slave-3.log

以Slave节点-1为例,执行日志如下所示:

liumiaocn:apache-jmeter-5.1.1 liumiao$ bin/jmeter -Djava.rmi.server.hostname=192.168.31.242 -Dserver_port=31099 -s -j /tmp/jmeter-slave-1.log
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.31.242:54607](local),objID:[-11cf5691:16d89ce546a:-7fff, 5500505409593956209]]]

   
   
   
   
  • 1
  • 2

Master节点设定与启动

最简单地设定方法下,Master节点只需要设定jmeter.properties中的remote_hosts即可。

  • 文件名称:jmeter.properties/user.properties
  • 所在目录:bin/
  • 修改项目:remote_hosts
  • 修改内容:设定Slave节点连接信息,格式为"IP地址:端口号",多个Slave节点的情况下,中间以逗号进行分割。
    本文设定示例如下所示:
remote_hosts=192.168.31.242:31099,192.168.31.242:31020,192.168.31.242:31021

   
   
   
   
  • 1

启动JMeter的Master节点

liumiaocn:apache-jmeter-5.1.1 liumiao$ bin/jmeter -j /tmp/jmeter-master.log
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 结果确认
    正确设定的情况下,在GUI界面的 运行 -> 远程启动 子菜单中能够看到三个Slave节点的信息,具体如下所示:

分布式测试实例

事前准备

这里我们直接测试本地启动的nginx的Web服务为例,进行分布式测试示例说明,详细的测试相关的步骤可以参看如下内容

  • https://liumiaocn.blog.csdn.net/article/details/101596482

测试线程组设定为100,循环次数设定为10
压力测试工具Apache JMeter:6:搭建分布式测试环境_第2张图片
HTTP请求设定如下
压力测试工具Apache JMeter:6:搭建分布式测试环境_第3张图片

测试执行

上述压测的例子,是通过100个线程组进行10次循环的例子,我们这里分别在三个Slave节点上执行来确认效果。

执行方法:GUI界面的 运行 -> 远程启动 -> 选择对应的Slave节点即可

分别选中三个节点,将上诉100x10的测试在三个Slave节点上分别执行。

结果确认

可以分别在三个启动的Slave节点的终端上进行日志确认,日志示例如下所示

  • Slave节点-1
liumiaocn:apache-jmeter-5.1.1 liumiao$ bin/jmeter -Djava.rmi.server.hostname=192.168.31.242 -Dserver_port=31099 -s -j /tmp/jmeter-slave-1.log
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.31.242:58561](local),objID:[434e9282:16d89e44409:-7fff, -2787220660178629740]]]
Starting the test on host 192.168.31.242:31099 @ Wed Oct 02 08:35:23 CST 2019 (1569976523090)
Finished the test on host 192.168.31.242:31099 @ Wed Oct 02 08:35:24 CST 2019 (1569976524468)

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • Slave节点-2
liumiaocn:apache-jmeter-5.1.1 liumiao$ bin/jmeter -Djava.rmi.server.hostname=192.168.31.242 -Dserver_port=31020 -s -j /tmp/jmeter-slave-2.log
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.31.242:58566](local),objID:[-728b31bf:16d89e45b1f:-7fff, -3170786169118547704]]]
Starting the test on host 192.168.31.242:31020 @ Wed Oct 02 08:35:28 CST 2019 (1569976528964)
Finished the test on host 192.168.31.242:31020 @ Wed Oct 02 08:35:31 CST 2019 (1569976531245)

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • Slave节点-3
^Cliumiaocn:apache-jmeter-5.1.1 liumiao$ bin/jmeter -Djava.rmi.server.hostname=192.168.31.242 -Dserver_port=31021 -s -j /tmp/jmeter-slav3.log
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.31.242:58570](local),objID:[-45d3de23:16d89e468ca:-7fff, 5972975523351273653]]]
Starting the test on host 192.168.31.242:31021 @ Wed Oct 02 08:35:35 CST 2019 (1569976535306)
Finished the test on host 192.168.31.242:31021 @ Wed Oct 02 08:35:36 CST 2019 (1569976536673)

   
   
   
   
  • 1
  • 2
  • 3
  • 4

聚合报告信息如下所示
压力测试工具Apache JMeter:6:搭建分布式测试环境_第4张图片
可以看到"#样本"的数量为3000,说明HTTP请求的测试执行了3000次,而这三千次是通过分别在三个节点上执行一次而得到的。

常见问题对应

问题现象

提示java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)错误信息

liumiaocn:apache-jmeter-5.1.1 liumiao$ bin/jmeter -Dserver_port=11099 -s -j /tmp/jmeter-slave-1.log
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)
liumiaocn:apache-jmeter-5.1.1 liumiao$ bin/jmeter -Dserver_port=1099 -s -j /tmp/jmeter-slave-1.log
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)
liumiaocn:apache-jmeter-5.1.1 liumiao$

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

原因

未设定ssh相关配置

对应方法

server.rmi.ssl.disable缺省值为false,将server.rmi.ssl.disable设定为true即可

  • 文件名称:jmeter.properties/user.properties,建议修改user.properties对设定进行覆盖更为合理
  • 所在目录:bin/
  • 修改项目:server.rmi.ssl.disable
  • 修改内容:将设定值修改为true

注:另外一种方法为通过-Dserver.rmi.ssl.disable=true传入设定也可。

你可能感兴趣的:(压力测试工具Apache JMeter:6:搭建分布式测试环境)