JMeter错误:java.net.BindException: Address already in use: connect


第一次用JMeter去实施上万并发的测试,结果遇到了滑铁卢,因为并发量较大所以需要多机负载的方式去实现。在确认单机的极限并发人数时遇到了以下错误:java.net.BindException: Address already in use: connect

原因在于windows默认的TCP/IP端口只有1024-5000个,而且释放的话大概需要4分钟才能够将之前占用的端口释放掉,导致当jmeter请求达到一定数量时提示上述错误

解决方式

取消JMeter-HTTP请求Use KeepAlive设置

更改Windows注册表中默认的TCP/IP端口数量

使用cmd输入regedit进入到负载机的注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

Parmeters右键新建DWORD值,命名为MaxUserPort,然后选择十进制并输入数据65534后保存

重新压测后发现到一定时间后还是存在该错误,继续寻找新的方法,突然想起了应该查看下端口占用的情况的,结果发现有大量的TIME_WAIT数据,根据查找结果有说windows下释放端口默认为5分钟,这时间也太长了- – 没办法又找了找更改默认端口时间的答案,在同样的注册表位置新建TcpTimeWaitDelay,值类型DWORD,数值数据为5s

重启测试机,再次进行测试,发现TIME_WAIT数量大幅度的下降,更改有效了。 😯

正文完

搜索


hisir 2024-10-29 10:42