做压测接口时,并发一段时间后,会报java.net.BindException: Address already in use: connect
原因:
windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致在短时间内跑大量的请求时将端口占满了,导致如上报错
Jmeter里的http sample勾选了
keep alive
,导致会话一直保持,而linux/windows本身的端口有限,导致端口被占用完后,无法分配新的端口,因此会产生java.net.BindException: Address already in use: connect 报错。
建立长连接后,这会占用压力机(请求方)的端口,同时也会占用被测服务器的端口,而我们的端口是有限的,因此这可能会成为性能瓶颈
解决
HTTP SAMPLE 不勾选keep alive
方法二:
在jmeter所在服务器操作:
-
cmd中输入
regedit
命令打开注册表 -
在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters
-
添加一个新的DWORD,名字为
MaxUserPort
-
然后双击MaxUserPort,输入数值数据为
65534
,基数选择十进制 -
重启机器