一、JAVA环境安装

1
2
3
4
5
6
7
8
9
# 创建文件夹
mkdir /usr/local/jdk

# 切换到目录
cd /usr/local/jdk
# 解压压缩包
tar -zxvf jdk-17_linux-x64_bin.tar.gz
# 打开配置文件
vi /etc/profile
  • Java环境变量配置
1
2
3
4
5
# set java enviroment
export JAVA_HOME=/usr/local/jdk/jdk-17.0.7
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
  • 刷新配置文件
1
2
3
source /etc/profile
# 验证配置是否成功
java - version

二、Jmeter安装

1
2
3
4
5
6
7
8
# 创建文件夹
mkdir /home/performance/tools
# 切换到目录
cd /home/performance/tools
# 解压压缩包
unzip apache-jmeter-5.5.zip
# 打开配置文件
vi /etc/profile
  • jmeter环境变量配置
1
2
3
4
# set jmeter enviroment
export JMETER_HOME=/home/performance/tools/apache-jmeter-5.5
export PATH=$JMETER_HOME/bin:$PATH
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
  • 刷新配置文件
1
2
3
4
source /etc/profile

# 验证配置是否成功
jmeter --version

三、分布式压测原理

1、控制机为Master,负载机为Slave

2、Master启动后,会拷贝jmx脚本文件到所有的Slave

3、Slave会回传压测数据给Master,最后由Master汇总出结果文件

📌 注意事项

  • 脚本文件上传到master即可,不用所有的slave都传一份
  • 由于master需要发送信息给slave并接收slave回传回来的测试数据,自身会有一定的消耗,建议单独配置一台机器作为master
  • 所有机器的jmeter版本和插件版本要一致
  • 如果jmeter版本在4.0以上,需在jmeter.properties中设置 server.rmi.ssl.disable=true

四、分布式环境配置

🎃Master环境配置

  • 编辑master机器jmeter/bin目录下的jmeter.properties文件,将所有slave机器的地址配置到文件中,server_port不用修改。
1
2
3
4
5
# Remote Hosts - comma delimited
remote_hosts=192.168.1.143:1099 (slave机器的ip和端口)
# remote_hosts=localhost:1099,localhost:2010
# ssl配置
server.rmi.ssl.disable=true

🎃Slave环境配置

  • 编辑所有slave机器jmeter/bin目录下的jmeter.properties文件,slaves机器上remote_hosts不动,根据需要修改服务端口。默认端口为1099,可以修改为任意未被占用的端口。我这里默认端口没有被占用,就不做修改。
1
2
3
4
5
6
7
8
9
# Remote Hosts - comma delimited
remote_hosts=127.0.0.1
#remote_hosts=localhost:1099,localhost:2010

# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099
# ssl配置
server.rmi.ssl.disable=true
server.rmi.localport=1099

  • 在所有的slave机器上执行 ./jmeter-server 命令,出现以下界面为执行成功。
  • 修改jmeter-server文件
1
RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.1.143
  • 性能配置优化
1
2
3
4
5
6
7
8
9
10
# 切换至bin目录下
cd /home/performance/tools/apache-jmeter-5.5/bin
# 对应的文件位置
vi jmeter
# 根据机器硬件配置做对应修改 调整内存配比
: "${HEAP:="-Xms1g -Xmx4g -XX:MaxMetaspaceSize=256m"}"
# 重启服务 - 后台运行
nohup jmeter-server -Djava.rmi.server.hostname=192.168.1.143 &
# 验证是否启动
ps -ef | grep jmeter

五、执行压测

1
2
3
4
5
# JthreadNum 线程数 # JloopNum 循环次数 # JrampupTime 循环时间 # JsynchronizeNum 同步定时器线程数
jmeter -n -t yxd_postorder.jmx -JthreadNum=100 -JloopNum=1 -JrampupTime=10 -JsynchronizeNum=100

# 指定远程Slave机压测
jmeter -r -n -t yxd_postorder.jmx -G synchronizeNum=100 -G threadNum=100 -G loopNum=1 -G rampupTime=10 -R 192.168.1.143

六、常见问题

w 在master上运行jmeter-server.bat时,出现Exception creating connection to:192.16..;nested exception is:java.io.FileNotFoundException:rmi_keystore.jks(系统找不到指定的文件)错误

解决方案

  • 修改apache-jmeter/bin/jmeter.properties 参数:server.rmi.ssl.disable=true

w 远程启动slave机器时,如出现Jmeter nested exception is:[java.net](http://java.net/).ConnectException connection timed out:connect错误

解决方案

  • 查看slave上的ipmaster配置文件中的ip是否一致;

  • 查看防火墙是否关闭

    1
    2
    # 关闭防火墙
    systemctl stop firewalld.service

w 启动jmeter时,报错:Error occurred during initialization of VM Could not reserve enough space for object heap errorlevel=1

解决方案

  • 这个错误一般是由于 JMeter 需要的堆空间超过了可用空间,导致 JVM无法分配足够的内存。你可以尝试以下方式来解决该问题:

  • 修改 JMeter 堆空间占用量

  • JMeter 的启动脚本中,你可以通过设置堆最小值最大值来增加可用堆空间

    1
    set HEAP=-Xms512m -Xmx1024m
  • 这里,Xms 是设置初始堆大小,Xmx 是设置最大堆大小,单位为 MB。你可以根据需要适当增大堆空间大小。如果你使用的是 macOS 或 Linux 系统,那么你可以通过 shell 脚本修改相应的环境变量。

  • 减少其他应用程序的内存占用

  • 如果你同时在计算机上运行了其他内存占用大的应用程序,那么就会导致 JMeter 无法获取足够的内存空间。此时,关闭其他应用程序,或者降低它们的内存占用量,是比较有效的解决办法。

  • 重新安装 JDKJMeter

  • 如果以上两种方式无法解决问题,你可以尝试重新安装 JDKJMeter,或者尝试使用其他版本的 JDKJMeter