Java-内存太少可能会阻止套接字数据传输?

Java-内存太少可能会阻止套接字数据传输?,java,sockets,memory,tcp,timeout,Java,Sockets,Memory,Tcp,Timeout,我正在Vserver上测试我的软件(几个应用程序)。所有应用程序都使用TCP连接到中央服务器。但几个小时后,它们都超时了,这意味着它们不再发送保持活动的数据包。实际上,它们是这样做的,但它不会到达服务器。 几秒钟后,超时的应用程序退出,并出现OutOfMemoryError 那么,应用程序之间的套接字通信是否也可能因为内存太少而被“阻止” 编辑:通常OOME之前的异常是管道破裂的IOException。实际上相关的异常是管道破裂。这意味着您已向已被对等方关闭的连接进行了写入。换句话说,应用程序协

我正在Vserver上测试我的软件(几个应用程序)。所有应用程序都使用TCP连接到中央服务器。但几个小时后,它们都超时了,这意味着它们不再发送保持活动的数据包。实际上,它们是这样做的,但它不会到达服务器。 几秒钟后,超时的应用程序退出,并出现OutOfMemoryError

那么,应用程序之间的套接字通信是否也可能因为内存太少而被“阻止”

编辑:通常OOME之前的异常是管道破裂的IOException。

实际上相关的异常是管道破裂。这意味着您已向已被对等方关闭的连接进行了写入。换句话说,应用程序协议错误


你文章的其余部分只是猜测。很明显,您的某个地方存在内存泄漏,并且应用程序协议实现错误。找到并修复它们。

什么能确保他们在死前真的发送了数据包?@McMonster如果他们没有发送“保持生命”数据包,它会抛出一个错误或类似的错误。该错误会在哪里抛出?在失败的客户中?请说得更具体些。TCP本身不实现任何形式的保持活动,因此只有当另一方不确认其接收到数据时,它才可能检测到故障,这取决于应用程序之间的传输频率和ACK超时。假设唯一存在的问题是OOME是完全合理的。@McMonster TCP确实实现了keepalive,但默认情况下它是关闭的。