jmeter 在持续调用接口一段时间后报:java.net.BindException: Address already in use: connect

通过搜索,发现几种方案:如果你搜索到本文,请先尝试方案2到方案4

---------------------------------------------------------------------------------------------------------------------------------

解决方案1: 问题描述:最近压测接口时,并发一段时间后,会报java.net.BindException: Address already in use: connect

Jmeter里的http sample勾选了keep alive,导致会话一直保持,而windows本身的端口有限,导致端口被占用完后,无法分配新的端口,因此会产生java.net.BindException: Address already in use: connect 报错。

方案: http SAMPLE 不勾选keep alive

结果:我去掉后勾选项后并没有解决我的问题

---------------------------------------------------------------------------------------------------------------------------------

解决方案2:问题描述:最近在用jmeter做压力测试时,发现一个问题,当线程持续上升到某个值时,报错:java.net.BindException: Address already in use: connect,

原因:windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致我们在短时间内跑大量的请求时将端口占满了,导致如上报错。

方案:

1.cmd中输入regedit命令打开注册表;

2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters;

3.添加一个新的DWORD,名字为MaxUserPort;

4.然后双击MaxUserPort,输入数值数据为65534,基数选择十进制;

5.完成以上操作,务必重启机器,问题解决,亲测有效;

结果:我亲测并没有效果,于是接着搜索解决方案,

---------------------------------------------------------------------------------------------------------------------------------

解决方案3:问题描述:今天在自己压测接口的时候遇到下面这个错误。jmeter java.net.BindException: Address already in use: connec

搜索之后发现需要在regedit中添加注册表项MaxUserPort,TcpTimedWaitDelay重启一下就可以解决了。

解决方法:

打开注册表:ctrl+r 输入regedit
进入注册表,路径为:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新建DWORD值,(十进制)设置为30秒。名称:TcpTimedWaitDe,值:30
新建DWORD值,(十进制)最大连接数65534。名称:MaxUserPort,值:65534

结果:这个方案和第二个方案一样,我亲测并没有效果,于是接着搜索解决方案,
---------------------------------------------------------------------------------------------------------------------------------

解决方案4:问题描述:近期因为疫情的原因,公司做了一个抢口罩的页面。需要对页面及接口做压力测试,遂遇到标题的问题。

原因:windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致我们在短时间内跑大量的请求时将端口占满了,导致如上报错。

解决办法(在jmeter所在服务器操作):

1.cmd中输入regedit命令打开注册表;

2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters;

3.添加一个新的DWORD,名字为MaxUserPort;

4.然后双击MaxUserPort,输入数值数据为65534,基数选择十进制;

5.完成以上操作,务必重启机器。

通过上述方式后,重新执行一次脚本。问题得到较好的解决,但是当循环次数和并发量上去之后,依旧存在该情况,遂找公司大神询问后,添加如下配置:

TcpNumConnections = 16777214

MaxHashTableSize = 65536

MaxFreeTcbs = 16000

TcpTimedWaitDelay = 30

相关值解析

MaxUserPort:最大动态端口数(Default = 5000, Max = 65534)
TcpTimedWaitDelay:TCP等待延迟时间(30)
TcpNumConnections:TCP最大连接数(Default = 16,777,214)

MaxFreeTcbs:最大TCP控制块(1000-2000)

MaxHashTableSize:最大TCB Hash table数量(64-65536)

运行之后,问题算是解决了,但是随着并发和循环次数增加之后,遇到另外一个问题:

java.net.SocketTimeoutException:Readtimed out,咨询开发后是请求返回超时。(这个问题我并没有遇到,也没有实现机会,在这里暂时不做解释,先加个链接,后续需要再看)

jmeter压力测试报错:java.net.BindException: Address already in use: connect解决方案_lynnpaul的博客-CSDN博客https://blog.csdn.net/lynnpaul/article/details/104674997?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

结果:测试之后还是没有解决,于是我又搜索了一番,有人说不勾选keep alive是不对的,我勾上确实解决了我所面临的问题,就是不知道在全盘勾选的情况下具体是那个参数起到了作用,也许方案2就能解决我所面临的问题,后续等换了电脑再次遇到该问题在具体实验吧

---------------------------------------------------------------------------------------------------------------------------------

之后有搜索 Keep-Alive在性能压测中的影响,这里先放个链接吧,等我研究明白在具体自己写

JMeter基础11 -- Keep-Alive在性能压测中的影响 - 简书 (jianshu.com)https://www.jianshu.com/p/c99a96fd4cb4?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静文·红·精灵

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值