连接卡在ESTABLISHED状态

在Debian机器上,我有几个连接挂了大概8个小时:

tcp6 0 0 192.168.1.35:56312 88.191.79.XXX:25 ESTABLISHED tcp6 0 0 192.168.1.35:43352 88.191.79.XXX:25 ESTABLISHED tcp6 0 0 192.168.1.35:56300 88.191.79.XXX:25 ESTABLISHED tcp6 0 0 192.168.1.35:43350 88.191.79.XXX:25 ESTABLISHED 

所有连接都位于位于不同networking中的同一台远程邮件服务器上。 远程机器实际上看不到这些连接。 Tcpdump也显示没有活动。

客户端是Java应用程序,并有4个线程在套接字中被阻塞读取:

 "MessageFeedbackQueueProc-Worker-202" prio=10 tid=0x00007f9c552f1800 nid=0x53d5 runnable [0x0000000043fb6000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) 

所有这些连接都发生在一段很短的时间内,之前和之后一切正常。

有趣的是,在同一时间在同一个Java应用程序的其他Windows机器上也发生了同样的情况。 在这种情况下,它禁止应用程序处理新的请求,因为所有的线程都被套接字读取阻塞了(尽pipe死了的远程端点没有发生超时)。 另一个奇怪的事情是:两台机器上的所有线程在完全相同的SMTP命令(MAIL FROM)之后被阻塞,但在不同的时刻。

为什么会发生这种情况,为什么这些连接不能超时?

当连接在防火墙被终止时,我看到了类似的东西。 两个terminal都不会看到FIN或RST,所以从他们的angular度来看,这个会话仍然处于活动状态,并处于已build立状态。 是否有可能查看两端的防火墙日志以查看连接是否被终止?

如果在空闲会话超时时间到期时没有数据穿越连接,则也可能是两端防火墙上的空闲会话超时设置。