【No buffer space available】异常解决

最近在工作中遇到这样一个场景:使用一个Java编写的模拟硬件设备的工具,这个工具会模拟很多设备(每个设备需要占用一个端口)去连接服务器。一般情况下,一台Windows虚拟机上会模拟5000至10000个设备,这样一般不会有问题。后来改成模拟40000个设备的时候,出现了“No buffer space available”的异常,具体如下:

在这里插入图片描述

1. 问题原因

乍一看以为是虚拟机内存不够或者是模拟工具分配的内存不够,后来检查发现,并不是这个原因。经过查找资料发现,这是端口不够所导致的。Windows默认情况下的端口启用情况可以用命令: netsh int ipv4 show dynamicportrange tcp来查看,具体如下:
在这里插入图片描述

可以看到,默认情况下启用端口数只有16384个,所以出现了上述错误。

2. 解决方法

管理身份运行命令窗口,然后通过命令netsh int ipv4 set dynamicport tcp start=2000 num=63000修改端口数。

其中:
start为起始端口号
num为端口数量

执行上述命令后再次查看端口启用情况:
在这里插入图片描述

可以看到,现在启用的端口总数是63000。这样上述问题就解决了!

3. 结语

因为在协议里端口使用两个字节存储的,所以端口的最大数量为65536。所以,单台机器上运行的程序占用的端口数不能超过这个数量。目前我还不知道是否有其他方法可以突破这个限制,如果有,还请大神赐教。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值