Jmeter分布式压测及踩坑记录

目录

工作节点(slave)配置

控制节点(master)配置

分布式压测

踩坑记录:


在工作中使用jmeter做大并发压力测试的场景下,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测服务器已经由于模拟的压力太大死机了。为了让jmeter工具提供更强大的负载能力,jmeter提供了多台机器同时产生负载的机制。

工作节点(slave)配置

工作节点(slave)
负载机(slaves)端口:tcp 1099

  • jmeter.properties:
    • 关闭SSL:server.rmi.ssl.disable=true
  • system.properties
    • 添加java.rmi.server.hostname=192.168.12.106 (IP为slave机器IP)
  • 运行:jmeter-server

Windows:
 


ip地址为负载机的IP
 


 


如果弹出是否允许防火墙,点击允许
Linux:
进入到Jmeter bin目录下
vim jmeter.properties
 


vim system.properties
 


IP地址为负载机的IP
./jmeter-server

控制节点(master)配置

控制节点(master):
端口:udp 4445

  • jmeter.properties
    • 添加负载机ip:remote_hosts=192.168.12.106,192.168.12.107 (IP为所有slave机器IP,以英文,分隔)
    • 关闭SSL:server.rmi.ssl.disable=true

vim jmeter.properties
 


vim jmeter.properties
 


./jmeter.sh

分布式压测

如图,可选择相应的远程服务器运行,活动点击远程启动所有,同时在所有远程机器上运行
 

注,Jmeter的并发对所有远程机器都是单独进行的,比如设置并发数为2,Jmeter会对所有远程机器的并发都是2,而控制节点实际的并发数是所有远程机器的并发之和
如下图,设置2个并发
 


同时运行2个远程机器,实际并发数为4

命令行运行:

 
$ jmeter -n -t baidu.jmx -l test_baidu.jtl -R 192.168.12.106,192.168.12.107
Creating summariser <summary>
Created the tree successfully using baidu.jmx
Configuring remote engine: 192.168.12.106
Configuring remote engine: 192.168.12.107
Starting distributed test with remote engines: [192.168.12.106, 192.168.12.107] @ Sun Feb 21 01:02:32 CST 2021 (1613840552118)
Remote engines have been started:[192.168.12.106, 192.168.12.107]
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary + 1 in 00:00:01 = 1.8/s Avg: 390 Min: 390 Max: 390 Err: 0 (0.00%) Active: 2 Started: 2 Finished: 0
summary + 3 in 00:00:22 = 0.1/s Avg: 12219 Min: 343 Max: 21252 Err: 0 (0.00%) Active: 0 Started: 4 Finished: 4
summary = 4 in 00:00:22 = 0.2/s Avg: 9261 Min: 343 Max: 21252 Err: 0 (0.00%)
Tidying up remote @ Sun Feb 21 01:02:55 CST 2021 (1613840575155)
... end of run

注意:如果脚本中有参数化,那么所有salve机器上都必须上传一份参数化文件,且保证路径相同!

踩坑记录:

一、jmeter进行分布式测试,远程机器来运行脚本,在察看结果树中的响应数据项为空白
第一步:打开主控机的jmeter--bin目录下的jmeter.properties文件
 

image


第二步:查找到mode=Standard 项
 

image


第三步:将其前边的注释去掉,然后保存重启jmeter,再次运行远程机器,就可以看到数据了

image

二、jmeter压力测试报Address already in use: connect错误
原因分析:
这个问题的原因是windows端口被耗尽了(默认1024-5000),而且操作系统要 2~4分钟才会重新释放这些端口,所以可以增加windows的可用端口来解决。windows端口最大数为65535
解决方法:

修改操作系统注册表:
1.cmd中,用regedit命令打开注册表
2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,
  1 .右击parameters,添加一个新的DWORD,名字为MaxUserPort
  2 .然后双击MaxUserPort,输入数值数据为65534,基数选择十进制(如果是分布式运行的话,控制机器和负载机器都需要这样操作哦)
3.修改配置完毕之后记得重启机器才会生效

上面这个方法能解决一部分问题。虽然增加了端口数,但压测的时候2分钟内发送超过 70000 个请求,还是报了 Address already in use: connect 的问题。

解决该问题有两种方法,一种是修改Jmeter配置项,一种是修改操作系统注册表

解决方法一:.

修改Jmeter配置项

不勾选 Use KeepAlive ,该配置默认勾选,去掉勾选后,请求就变为短连接。

image

解决方法二:.

修改操作系统注册表

1、cmd输入:regedit
2、找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters
3、新建 QWORD值,name:TcpTimedWaitDelay,value:30(十进制)
4、重启系统
 

image


三、分布式压测时,2台压测机并发不同步
 

image


如上图,2台压测机加压时间相差30s左右

原因分析:
由于2台压测机本地时间不一致导致
解决办法:
修改2台压测机本地时间相同
四、分布式压测时,线程异常停止
 

image


如上图,脚本中设置为100并发,但实际压测时,线程加到100时立即停止了一半的线程
原因分析:
jmeter运行虚拟内存不足
解决办法:
需要调整jmeter运行虚拟内存
在Jmeter的bin目录下的启动脚本jmeter.bat中,添加或修改jvm配置如下参数

 
if not defined HEAP (
rem See the unix startup file for the rationale of the following parameters,
rem including some tuning recommendations
set HEAP=-Xms3g -Xmx3g -XX:MaxMetaspaceSize=1g
)

image

可视压测机配置情况加大或减小内存

重新启动Jmeter,线程启动正常

image

总结:

感谢每一个认真阅读我文章的人!!!

 我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家评论区留言333免费领取,千万不要错过哦。

                                                                        

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值