Jmeter分布式压测

分布式压测背景

压测不同请求量级的服务,需要模拟的用户并发请求数量也会差异很多。同时单机压测存在压测宿主机CPU和内存配置有限制,随着模拟用户线程数增加会让压测机存在很大性能瓶颈,所以需要通过jmeter分布式压测特性进行应用,支撑模拟更多用户进行压测

分布式压测配置

Controller机器配置

  • 找到%JMETER_HOME%/bin/jmeter.properties文件修改如下配置:
remote_hosts=192.168.100.36

server.rmi.ssl.disable=true

# To change the default port (1099) used to access the server:
#server.rmi.port=1234  如果server启动端口修改,则需要修改默认的端口
  • jmeter5.0以上版本需要生成证书(待完善 --前期报错未记录)

Agent机器配置

  • 找到%JMETER_HOME%/bin/jmeter.properties文件修改如下配置:
# RMI port to be used by the server (must start rmiregistry with same port)
server_port=1099  #代表启动jmeter-server默认监听口

server.rmi.ssl.disable=true

若修改为端口10000启动服务后可以通过查看,对应服务监听了10000端口

 

分布式压测配置常见问题

1、jmeter远程启动提示“no such object in table”

解决方法:remote_hosts=192.168.100.36:1099 去掉配置host的端口

目前在默认在%JMETER_HOME%/bin/jmeter.properties指定了端口

# To change the default port (1099) used to access the server:
#server.rmi.port=1234  如果需要修改默认的端口则需要修改

2、远程启动服务时提示“java.net.ConnectException: Connection refused: connect”

可能原因:1、Slave未启动服务

2、启动服务但是同样报错,网络不同,检查agent和controller启动监听网口IP是否在同一网段

而我遇到的情况是,agent和controller存在多个网卡多个IP时,各自启动服务时监听网卡IP不在同一网段

服务端(Slave)配置:

方法一:
jmeter-server -Djava.rmi.server.hostname=192.168.100.xxx

方法二:
jmeter-server文件中添加
RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.x.x (和控制端可以通信的IP)

但具体使用哪种方法,有什么区别?

很多没有说明清楚jmeter在什么环境使用如上配置,接下来分别查看安装bin目录下jmeter-server.sh和jmeter-server.bat文件内容如下:

  • jmeter-server.sh分析
  1. 发现文件中包含RMI_HOST_DEF变量,且启动命令中使用了RMI_HOST_DEF变量,可以初步判断当时在linux上启动jmeter server时可以通过这种方式指定启动的IP
${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j jmeter-server.log "$@"

#!/bin/sh

删除掉部分内容

##   To change the RMI/Server port:
##
##   SERVER_PORT=1234 jmeter-server
##

DIRNAME=`dirname $0`

# If the client fails with:
# ERROR - jmeter.engine.ClientJMeterEngine: java.rmi.ConnectException: Connection refused to host: 127.0.0.1
# then it may be due to the server host returning 127.0.0.1 as its address

# One way to fix this is to define RMI_HOST_DEF below
#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx

${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j jmeter-server.log "$@"

  • jmeter-server.bat(部分实际运行内容)分析

1、(文件内容向下滚动)发现最后实际运行通过调用call jmeter -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%或者call jmeter -Dserver_port=%SERVER_PORT% -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%启动服务;

2、JMETER_CMD_LINE_ARGS通过脚本可以看出用于接受执行脚本文件时,cmd控制台传入的参数,例如jmeter-server -Djava.rmi.server.hostname=192.168.100.xxx命令中对应-Djava.rmi.server.hostname部分

3、是否可以通过如下方式设置达到目的,但最终发现始终失败,只有通过jmeter-server -Djava.rmi.server.hostname=192.168.xx.xxx能实现。按道理来将应该有其他解决方式,要不然每次加参数比较麻烦,待继续实践哈,给自己留点问题(2022.2.25)

 

setlocal

if exist jmeter-server.bat goto winNT1
echo Changing to JMeter home directory
cd /D %~dp0
:winNT1

if exist %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar goto setCP
echo Could not find ApacheJmeter_core.jar ...
REM Try to work out JMETER_HOME
echo ... Trying JMETER_HOME=..
set JMETER_HOME=..
if exist %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar goto setCP
echo ... trying JMETER_HOME=.
set JMETER_HOME=.
if exist %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar goto setCP
echo Cannot determine JMETER_HOME !
goto exit

:setCP
echo Found ApacheJMeter_core.jar

REM No longer need to create the rmiregistry as it is done by the server
REM set CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar

REM START rmiregistry %SERVER_PORT%
REM

rem On NT/2K grab all arguments at once
set JMETER_CMD_LINE_ARGS=%*

if not "%SERVER_PORT%" == "" goto port

call jmeter -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%
goto end


:port
call jmeter -Dserver_port=%SERVER_PORT% -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%

:end

rem No longer needed, as server is started in-process
rem taskkill /F /IM rmiregistry.exe

:exit

控制端(Controller)配置

修改jmeter.bat文件

增加配置项:set rmi_host=-Djava.rmi.server.hostname=1.X.X.X(和server可正常通信的IP)
修改配置项:set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %CLASS_UNLOAD% %DDRAW% %rmi_host%

3.当jmeter脚本中需要依赖csv等数据文件时,该文件需上传至服务器,并需要设置正确的路径

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JMeter分布式压测是使用多台计算机同时执行JMeter测试计划,以模拟大量并发用户的压力。使用分布式压测可以有效提高负载能力,并避免单台机器的性能限制。在分布式压测中,一个JMeter主控节点负责管理所有的测试计划和生成结果报告,而多个JMeter工作节点则同时执行测试计划,并将结果返回给主控节点进行统计和分析。 要进行JMeter分布式压测,需要进行以下步骤: 1. 配置JMeter主控节点:在主控节点上,设置一个JMeter测试计划,并将其配置为分布式测试模式。在测试计划中,设置各个线程组、取样器和监听器等测试元素,以模拟真实的用户行为。 2. 配置JMeter工作节点:在每个工作节点上,安装并配置JMeter,并确保与主控节点在同一局域网中。工作节点需要拥有相同的测试计划文件和测试数据。 3. 启动主控节点:在主控节点上启动JMeter,并开始压测。主控节点会将测试计划和相关配置发送给各个工作节点,并收集并分析结果。 4. 启动工作节点:在每个工作节点上启动JMeter,并连接到主控节点。工作节点会接收主控节点发送的测试计划和相关配置,并执行测试计划。 5. 监控和分析结果:在压测过程中,可以通过主控节点的监听器查看实时结果,并在压测结束后生成详细的报告进行分析。 以上是JMeter分布式压测的基本流程。通过合理配置和管理分布式压测环境,可以更好地模拟真实的用户场景,评估系统的性能和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值