java – Windows主机上的服务器拒绝客户端套接字连接小数(16

我们遇到的问题是,当相对较少的节点(16到24,但我们将来需要处理更多)尝试同时连接时,我们的套接字服务器的传入客户端套接字连接被拒绝.

一些细节:

>服务器正在Windows 2008或7上运行
>我们的主服务器是使用ServerSocket用Java编写的
>客户端也是在我们数据中心的网格节点上运行的Windows

当我们尝试在网格上运行测试时,客户端节点会尝试连接到服务器并发送40-100K数据包然后断开连接.使用16到24个节点,我们开始发现客户端连接无法连接到服务器的问题.鉴于此设置,我们尝试最多可能处理16-24个并发客户端连接并失败,这对我们来说似乎不对.

主服务器循环正在侦听常规SocketServer,当它获得连接时,它会生成一个新的Thread来处理连接,立即返回侦听socket.我们还有一个虚拟的python服务器,只需读取和丢弃传入的数据,以及一个在转储数据之前记录数据的C服务器,并且两者都遇到同样的问题,客户端无法连接之前有多少成功客户端连接的微小变化失败开始了.这使我们相信任何特定的服务器在这个问题上没有错,而且可能是环境问题.

我们首先想到的是套接字上的TCP积压.即使推到很高的水平,这也没有缓解这个问题. Java SocketServer的默认值为50,远低于我们能够处理的值.

我们在同一子网上的机器之间运行测试,并禁用机器上的所有本地防火墙,以防FW对我们与服务器的连接进行速率限制;没有成功.

我们尝试在运行服务器的Windows机器上调整网络:

>减少TimedWaitDelay,但没有效果(在我的Python测试中它不应该因为该测试只运行几毫秒).
>将MaxUserPort增加到一个大值,大约65000,但没有效果(这是奇怪的,因为我的Python测试只发送240条消息,所以我甚至不应该接近这种类型的限制).
>将TcpNumConnection增加到一个较大的值(不记得确切的数字).同样,我们一次不应该有超过24个连接,所以这不是一个限制.
>启动“动态积压”功能,允许消息积压动态增加.我认为我们将最大值设置为2000连接,最小1000个连接,但没有效果.同样,Python永远不应该超过240个连接,所以我们甚至不应该激活动态积压.
>除了上面禁用TCP端口的Windows“自动调整”.再一次,没有效果.

我的感觉是Windows在某种程度上限制了入站连接的数量,但我们不确定要修改什么以允许更多的连接.网络上代理限制连接速率的想法似乎也不正确.我们高度怀疑同时连接的数量是否会使物理GB网络过载.

我们很难过.有没有其他人遇到这样的问题,并找到了解决方案?

最佳答案
我会检查TCP连接的TIME_WAIT状态中有多少连接.我已经看到这种类型的问题,因为许多连接被打开/关闭导致套接字因TIME_WAIT而耗尽.要检查它,请运行:

netstat -a

转载注明原文:java – Windows主机上的服务器拒绝客户端套接字连接小数(16 - 代码日志