我有一个Java非阻塞服务器,跟踪选择器中的所有套接字通道。然后我建立500个连接到服务器并定期发送数据。服务器收到的每个数据都会回显到客户端。
问题出现在测试良好运行几个小时后,突然间服务器正在管理的所有套接字逐渐抛出“连接超时IOException”异常,当尝试读取数据时。
我已经调查了客户端线程是否被饥饿(没有发送数据),但是我正在让迭代所有套接字并写出数据的客户端线程来执行。流量似乎一直正常地流动,但是一段时间后就全部消失了。有什么想法可能导致这种行为吗?
我在Linux平台上运行,使用最新版本的Java 6。我的应用程序启动两个线程,一个用于服务器,另一个用于所有客户端。提前感谢!
额外信息: 问题与Linux有关,而不是我的代码。当我在Windows机器上运行完全相同的设置(在相同的硬件上)时,它永远不会超时,但是在Linux上经过几个小时后开始发生。这必须是Linux中某种TCP设置引起的。感谢您的建议。
问题出现在测试良好运行几个小时后,突然间服务器正在管理的所有套接字逐渐抛出“连接超时IOException”异常,当尝试读取数据时。
我已经调查了客户端线程是否被饥饿(没有发送数据),但是我正在让迭代所有套接字并写出数据的客户端线程来执行。流量似乎一直正常地流动,但是一段时间后就全部消失了。有什么想法可能导致这种行为吗?
我在Linux平台上运行,使用最新版本的Java 6。我的应用程序启动两个线程,一个用于服务器,另一个用于所有客户端。提前感谢!
额外信息: 问题与Linux有关,而不是我的代码。当我在Windows机器上运行完全相同的设置(在相同的硬件上)时,它永远不会超时,但是在Linux上经过几个小时后开始发生。这必须是Linux中某种TCP设置引起的。感谢您的建议。
netstat -a
输出呢?有没有任何处于不正常状态的套接字? - John Kugelman