一、前言:
之前已经介绍过Windows系统本地局域网搭建压力机集群的方式了,这次记录点儿更实用的,如何在Linux环境中搭建JMeter压力机集群,以及基本使用。
首先我们要明确为什么要选择在liunx服务器上搭建压力机集群,而不直接在本地(自己的windows电脑)上搭建呢?
其实就是为了更准确的压测。首先,压测目标机通常都是部署在云服务商的linux系统上的,如果我们使用本地搭建的压力机去请求,那么将会受到数据传输的带宽影响,使得数据失真。为了避免受带宽的影响,通常要求在同一内网环境下进行压测。其次,jmeter脚本在linux系统上执行,对本机的性能损耗更低,更能施压。
综上所述,我通常都是在windows系统上完成压测脚本的编辑与调试,最终在linux系统上进行无GUI界面的操作。
二、基本原理:
-
1、JMeter 分布式测试,选择一台测试机节点来当调度服务器,其他的测试机节点作为执行节点,通过调度节点管理其他节点;
-
2、启动服务时,调度服务器会把脚本发送到各个执行节点(脚本会发送到执行节点,但是数据不会发送),执行节点拿到脚本开始执行命令;
-
3、各个执行节点执行结束以后将结果回传给调度节点,调度节点进行数据汇总。
三、环境搭建:
通过三台不同网段的公网IP搭建压力机集群。
1. 安装JDK(java环境)
# 默认会选择jdk8,通过yum安装的jdk不需要手动配置环境变量。
yum install java
2. 下载JMeter并解压、配置
①、前往JMeter官网下载资源:https://jmeter.apache.org/
②、将下载好的资源传上服务器并解压。
# 若使用Xshell,可通过拖拽的方式上传资源,解压的操作如下:
tar -zxvf 压缩文件名.tar.gz
③、为JMeter配置环境变量,这样就能在任意路径执行JMeter了。
# 1、打开liunx的环境变量文件
vim /etc/profile
# 2、将以下内容黏贴、保存进文件(记得填写你自己对应的路径)
export JMETER_HOME=/data/jmeter/apache-jmeter-5.4.3
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH
export PATH=$JMETER_HOME/bin:$PATH
# 3、保存退出文件后,执行下面两条加载刷新
source ~/.bash_profile
source /etc/profile
# 4、若出现修改配置后,基本指令丢失(command not found)的情况,可执行下面的指令,暂时应急回退,再重新检查修改填写的内容,最后在重复步骤3的指令。
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
# 5、任意路径下查看JMeter信息,加载出来就表示配置成功了
jmeter -v
3. 修改编码
找到 /data/jmeter/apache-jmeter-5.4.3/bin/jmeter.properties 文件,并修改默认编码为 UTF-8 。
sampleresult.default.encoding=UTF-8
4. 上传配置文件
将常用的插件plugins-manager.jar、及自己封装的工具jar上传至对应的lib/ext目录下。
5. 主机(调度机)进行如下配置:
Ⅰ、进入jmeter的bin目录
cd /data/jmeter/apache-jmeter-5.4.3/bin
Ⅱ、编辑jmeter配置文件
vim jmeter.properties
Ⅲ、搜索并替换jmeter.properties的参数:
# 关闭SSL安全验证,使用公网IP的情况下,开启这个的话,启动jmeter-server会报错。
server.rmi.ssl.disable=true
# 配置压力机IP,多个使用逗号间隔开
remote_hosts=150.158.***.***,111.229.***.***,110.42.***.***
# 配置服务端口
server_port=1099
6. 从机(压力机)进行如下配置:
Ⅰ、进入jmeter的bin目录
cd /data/jmeter/apache-jmeter-5.4.3/bin
Ⅱ、编辑jmeter配置文件
vim jmeter.properties
Ⅲ、搜索并替换jmeter.properties的参数
# 关闭SSL安全验证,使用公网IP的情况下,开启这个的话,启动jmeter-server会报错。
server.rmi.ssl.disable=true
# 配置服务端口
server_port=1099
Ⅳ、编辑jmeter-server文件
RMI_HOST_DEF=-Djava.rmi.server.hostname=111.229.***.***
以上就完成了集群的搭建了,需要特别注意的是,这里我无法使用ssl连接的方式搭建非内网的压力机集群,会报端口无法启动。(弄了几天都不行,网上也搜索不到,可能因为一般人都不会这样操作吧,都偏向内网下部署。)
c如果使用SSL,还有个坑:主机(调度机)密钥必须要在jmx执行路径下,否则会提示找不到签名key。
Ⅴ、启动jmeter-server服务
jmeter server
提示:若想在控制台中打印信息,可在BeanShell中System.out.println(“”);
四、非GUI下,JMeter基本指令:
短命令 | 长命令 | 描述 |
---|---|---|
–? | 打印命令行选项和退出 | |
-h | –help | 打印版本信息并退出 |
-v | –version | 打印命令行选项和退出 |
-p | –propfile |
要使用的JMeter属性文件 |
-q | –addprop |
额外的JMeter属性文件 |
-t | –testfile |
要运行的JMeter测试(.jmx)文件。“-t last”将加载最后使用的文件 |
-l | –testfile |
将文件到日志样本 |
-i | –jmeterlogconf |
JMeter日志记录配置文件(log4j2.xml) |
-j | –jmeterlogfile |
JMeter运行日志文件(JMeter.log) |
-n | –nongui | 在非GUI模式下运行jmeter |
-s | –server | 运行JMeter服务器 |
-E | –proxyScheme |
设置用于代理服务器的代理方案 |
-H | –proxyHost |
设置用于JMeter的代理服务器使用 |
-P | –proxyPort |
设置JMeter的代理服务器端口使用 |
-N | –nonProxyHosts |
设置非申请主机列表(例如,*.apache.org |
-u | –username |
为JMeter用于使用的代理服务器设置用户名 |
-a | –password |
设置JMeter使用的代理服务器的密码 |
-J | –jmeterproperty |
定义其他JMeter属性 |
-G | –globalproperty |
定义全局属性(发送到服务器) 例如 -Gport=123 或 -Gglobal.properties |
-D | –systemproperty |
定义其他系统属性 |
-S | –systemPropertyFile |
附加系统属性文件 |
-f | –forceDeleteResultFile | 如果在开始测试之前,请强制删除现有结果文件和Web报告文件夹 |
-L | –loglevel |
[类别=]级别为例如jorphan =信息,jmeter.util = debug或com.example.foo = warn |
-r | –runremote | 启动远程服务器(如remote_hosts中的定义) |
-R | –remotestart |
启动这些远程服务器(覆盖remote_hosts) |
-d | –homedir |
使用JMeter主目录 |
-X | –remoteexit | 在测试结束时退出远程服务器(非GUI) |
-g | –reportonly |
仅从测试结果文件生成报表仪表板 |
-e | –reportatendofloadtests | 负载测试后生成报告仪表板 |
-o | –reportoutputfolder |
报表仪表板的输出文件夹,文件夹必须为空,否则会失败 |
五、常用指令:
# 自行替换jmx路径、ip、jtl文件及路径
jmeter -n -t tests.jmx -R 172.17.0.5,172.17.0.15,172.17.0.14 -l result.jtl -e -o ./report
评论区