基本介绍:
Jmeter压测过程中,由于测试机配置有限,CPU、内存都可能是存在瓶颈。如果使用很大的并发进行测试时,就可能会感到程序比较卡,这时候就无法继续增加压力了,所以我们需要搭建集群来分担压力。
基本原理:
-
1、JMeter 分布式测试,选择一台测试机节点来当调度服务器,其他的测试机节点作为执行节点,通过调度节点管理其他节点;
-
2、启动服务时,调度服务器会把脚本发送到各个执行节点(脚本会发送到执行节点,但是数据不会发送),执行节点拿到脚本开始执行命令;
-
3、各个执行节点执行结束以后将结果回传给调度节点,调度节点进行数据汇总。
使用方式:
-
1、通过SSL连接(需要身份验证,较安全,推荐)
-
2、关闭SSL,直连。
操作步骤详解:
SSL连接
1、主机(调度服务器/Master) 配置 从机(执行服务器/Slave)信息
添加从机ip地址到主机的 JMeter安装目录\bin\jmeter.properties 文件中。
# Remote Hosts - comma delimited
#remote_hosts=127.0.0.1
remote_hosts=192.168.50.213
#remote_hosts=localhost:1099,localhost:2010
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099
2、生成.jks文件(签名证书)
JMeter默认启动了RMI.SSL配置,启动服务进行远程连接,需要验证身份,所以需要该jks文件配置。
双击执行 JMeter安装目录\bin\create-rmi-keystore.bat 脚本,并按提示输入内容、回车确定。
生成的jks文件需要拷贝一份到从机的bin目录上。
3、从机(执行服务器/Slave)运行 jmeter-server 文件
以管理员身份运行从机的 JMeter安装目录\bin\jmeter-server.bat 文件。(注意检查服务ip,当测试机网卡较多时,容易IP使用错误)
4、主机 远程调度 从机 执行脚本
主机上点击导航栏的 “运行 -- 远程运行 -- 选择节点ip”,如下图:
主机上的执行结果如下:
从机控制台上显示如下:
直连模式
1、修改主机的配置文件
关闭 RMI.SSL 开关。
# Set this if you don't want to use SSL for RMI
#server.rmi.ssl.disable=false(默认)
server.rmi.ssl.disable=true
添加从机ip地址到主机的 JMeter安装目录\bin\jmeter.properties 文件中。
# Remote Hosts - comma delimited
#remote_hosts=127.0.0.1
remote_hosts=192.168.50.213
#remote_hosts=localhost:1099,localhost:2010
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099
2、从机(执行服务器/Slave)运行 jmeter-server 文件
以管理员身份运行从机的 JMeter安装目录\bin\jmeter-server.bat 文件。(注意检查服务ip,当测试机网卡较多时,容易IP使用错误)
3、主机 远程调度 从机 执行脚本
主机上点击导航栏的 “运行 -- 远程运行 -- 选择节点ip”,如下图:
注意事项:
1、远程调用,主机上看不到响应结果。
JMeter默认模式为了减轻主机和网络的压力,移除了响应数据,若想看也可通过修改 jmeter.properties 文件中模式,来改变默认操作。
具体模式说明如下:
-
Stripped(默认):将成功采样的响应数据移除。
-
Standard:在采样结果产生后立即发送。
-
Hold:将采样结果保存在一个数组中,直到测试结束。这可能会占用远程服务器的大量内存。
-
Batch:当计数器或者时间超过阈值之后,发送保存的采样结果。
-
Statistical:当计数器或者时间超过阈值之后,以概要的形式发送采样结果;采样结果以线程组(Thread Group)名称和采样标签(Sample Label)进行概要统计。积累的数据域包括:elapsed time、latency、bytes、sample count、error count,其他数据域将会被丢弃。
-
StrippedBatch:将成功采样的响应数据移除,并批次发送。
-
Custom implementation:将模式参数设置为测试人员的客户化采样发送器的类名。该类必须实现接口SampleSender,并且类的构造函数只有一个RemoteSampleListener型的参数。
如下属性会影响Batch和Statistical模式。
- num_sample_threshold:一个批次中的采样数目(默认为100)。
- time_threshold:等待的毫秒数(默认为60秒)。
2、远程调用,外部文件引用失败。
主机执行的脚本一旦有引用外部文件的,如CSV数据配置、jar包引用等,都是需要拷贝一份文件到从机对应目录上的,否则接口执行就会无响应。
3、jmeter-server.bat执行报错
异常信息:
java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
这个异常是因为JMeter启动了RMI.SSL,需要我们生成.jks文件。
异常信息:
java.io.IOException: java.security.UnrecoverableKeyException: Cannot recover key
这个异常时因为生成.jks文件时,输入的密钥指令与默认的不一致,只要我们使用同一个密钥指令就可以了。通常使用默认的,jmeter.properties 文件中的密码为changeit。
评论区