java - 对卡在 CLOSE_WAIT 状态的连接进行故障排除

标签 java sockets tcp weblogic netstat

我有一个 Java 应用程序在 Windows 上的 WebLogic 11g 中运行,几天后它变得无响应。我注意到的一个可疑症状是大量连接(大约 3000 个)出现在 netstat 中,即使服务器处于空闲状态也是如此。由于应用程序服务器正在管理客户端连接,我不确定是什么原因造成的。我们还进行了许多返回到同一服务器的 Web 服务调用,但我相信这些连接会正确关闭。还有什么可能导致此问题以及如何解决此类问题?

最佳答案

CLOSE_WAIT 是本地 TCP 状态机在远程主机发送 FIN(关闭其连接)但本地应用程序没有执行相同操作并发送回复 FIN 时所处的状态。此时本地机器仍然可以发送数据,尽管客户端无法接收数据(除非它只在连接上半关闭)。

当远程主机关闭(发送 FIN)时,您的本地应用程序将收到某种事件(这是基本 C 库中套接字上的“读取”事件),但从该连接读取将返回错误表示连接已关闭。此时本地应用程序应该关闭连接。

我对Java知之甚少,对WebLogic一无所知,但我认为应用程序可能没有正确处理读取错误,因此从未关闭连接。

关于java - 对卡在 CLOSE_WAIT 状态的连接进行故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5636316/

相关文章:

java - 与不可变对象(immutable对象)一起使用的类工厂 (java) 方法的调用方法

node.js - Socket.IO和Electron无法发射或接收

android - 3G 中的 NAT 是如何工作的

java - 重用套接字的输入流

select - 从 Go channel 获取值(value)

java - 我想显示一个变量值,其中变量名称与连接的字符串匹配

java - Android 使用共享首选项来检查首次运行

java - 是否可以在输入类型 ="file"上执行此操作?

java - DatagramSocket : File sending, 客户端未收到图像文件

go - 尝试在 golang 中使用 io.CopyN() 读取时客户端卡住了