我有一个 Java 非阻塞服务器,它跟踪选择器中的所有套接字通道。然后我与服务器建立 500 个连接并定期发送数据。服务器接收到的每条数据都会回显给客户端。
问题出现在测试工作出色的几个小时,然后突然间,服务器管理的所有套接字在尝试读取数据时都会抛出 Connection timed out IOException。
我已经查看了客户端线程是否被饿死(而不是发送数据),但我正在让客户端线程遍历所有套接字并写出数据。流量似乎一直在正常流动,但一段时间后它就全部消失了。任何想法可能导致这种行为?
我正在使用最新版本的 Java 6 的 Linux 平台上运行。我的应用程序启动两个线程,一个用于服务器,一个用于所有客户端。提前致谢!
额外: 问题是处理 Linux 而不是我的代码。当我在 Windows 机器上(在同一硬件上)运行完全相同的设置时,它永远不会超时,但几个小时后它们开始在 Linux 上发生。一定是Linux中的某种TCP设置导致它发生。谢谢你的建议。