【No buffer space available】异常解决
最近在工作中遇到这样一个场景:使用一个Java编写的模拟硬件设备的工具,这个工具会模拟很多设备(每个设备需要占用一个端口)去连接服务器。一般情况下,一台Windows虚拟机上会模拟5000至10000个设备,这样一般不会有问题。后来改成模拟40000个设备的时候,出现了“No buffer space available”的异常,具体如下:
- 问题原因
乍一看以为是虚拟机内存不够或者是模拟工具分配的内存不够,后来检查发现,并不是这个原因。经过查找资料发现,这是端口不够所导致的。Windows默认情况下的端口启用情况可以用命令: netsh int ipv4 show dynamicportrange tcp来查看,具体如下:
可以看到,默认情况下启用端口数只有16384个,所以出现了上述错误。
- 解决方法
以管理身份运行命令窗口,然后通过命令netsh int ipv4 set dynamicport tcp start=2000 num=63000修改端口数。
其中:
start为起始端口号
num为端口数量
执行上述命令后再次查看端口启用情况:
可以看到,现在启用的端口总数是63000。这样上述问题就解决了!
- 结语
因为在协议里端口使用两个字节存储的,所以端口的最大数量为65536。所以,单台机器上运行的程序占用的端口数不能超过这个数量。目前我还不知道是否有其他方法可以突破这个限制,如果有,还请大神赐教。
————————————————
版权声明:本文为CSDN博主「冷血有情556」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liu_005/article/details/83443790