解决大量TCPIP连接后出现“因为系统缺乏足够缓冲区空间或者因为队列已满无法执行套接字上操作”的问题
用微软提供的方法,可以放开系统的限制,详细方法见下文,最大理论连接数6万左右,也就是4字节整数的最大值。
实际服务器端程序的服务能力取决于开发模型,在 Window 下使用 IOCP 模型效率最高(2K/XP/2003下可用),另外最高并发连接数与服务器的硬件配置特别是内存有很大关系。我实测的最大并发连接数为 3.2万左右,有人通过增加内存和提高配置的方法使并发连接数增加到了5.1万左右,这个数字我没有验证过,仅供参考。
症状
loadTOCNode(1, 'symptoms');如果您尝试建立 TCP 连接从端口是大于 5000, 本地计算机响应并以下 WSAENOBUFS (10055) 错误信息:
因为系统缺乏足够缓冲区空间或者因为队列已满无法执行套接字上操作。
解决方案
loadTOCNode(1, 'resolution');要点 此部分, 方法或任务包含步骤告诉您如何修改注册表。 但是, 如果修改注册表错误可能发生严重问题。 因此, 确保仔细执行这些步骤。 用于添加保护之前, 修改备份注册表。 然后, 在发生问题时还原注册表。 有关如何备份和还原注册表, 请单击下列文章编号以查看 Microsoft 知识库中相应:
默认最大数量的短暂 TCP 端口为 5000 ' 适用于 ' 部分中包含产品中。 这些产品中已添加新参数。 要增加最大值是短暂端口, 请按照下列步骤操作:
注意 一个附加 TCPTimedWaitDelay 注册表参数决定多久关闭端口等待可以重用关闭端口。
322756 (http://support.microsoft.com/kb/322756/) 如何备份和还原在 Windows 注册表
默认最大数量的短暂 TCP 端口为 5000 ' 适用于 ' 部分中包含产品中。 这些产品中已添加新参数。 要增加最大值是短暂端口, 请按照下列步骤操作:
1. | 启动注册表编辑器。 |
2. | 注册表, 中找到以下子项, 然后单击 参数 :
HKEY _ LOCAL _ MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
|
3. | 在 编辑 菜单, 单击 新建 , 然后添加以下注册表项:
MaxUserPort 值名称:
值类型: DWORD 值数据: 65534 有效范围: 5000 - 65534 (十进制) 默认: 0x1388 5000 (十进制) 说明: 此参数控制程序从系统请求任何可用用户端口时所用最大端口数。 通常, 1024 的值和含 5000 之间分配临时 (短期) 端口。 |
4. | 退出注册表编辑器, 并重新启动计算机。 |