java - Java 应用程序中奇怪的网络套接字泄漏

标签 java sockets networking memory-leaks

我正在 try catch Java 守护程序中的网络套接字泄漏,该守护程序在 lsof 中具有相当奇怪的输出:

java    11734 root  463u  IPv6          225927527                TCP 192.168.254.1:http->192.168.254.1:46149 (CLOSE_WAIT)
java    11734 root  464u  IPv6          225927347                TCP 192.168.254.1:http->192.168.254.1:46102 (CLOSE_WAIT)
java    11734 root  465u  IPv6          225928791                TCP 192.168.254.1:http->192.168.254.1:46451 (CLOSE_WAIT)
java    11734 root  466u  IPv6          225927617                TCP 192.168.254.1:http->192.168.254.1:46170 (CLOSE_WAIT)
java    11734 root  467u  IPv6          225930330                TCP 192.168.254.1:http->192.168.254.1:57333 (CLOSE_WAIT) 

依此类推,直到它吃掉所有可用的描述符并导致“文件过多”错误。

知道什么会导致这种情况吗?

提前致谢!

最佳答案

CLOSE_WAIT 表示连接已被远程对等方关闭,但套接字正在等待本地应用程序将其关闭。所以你没有这样做。

您需要检查您是否正确处理 EOS,即在所有可能出现的情况下关闭套接字,并且在任何套接字操作上的IOExceptions - 您必须响应all 其中除了 SocketTimeoutException 是通过关闭套接字来实现的。您还必须确保套接字在 finally block 中关闭。

关于java - Java 应用程序中奇怪的网络套接字泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4484531/

相关文章:

java - 无法通过 Android 从另一台 Android 设备接收 UDP 数据包

php - PHP中如何查找所有监听的端口?

Java多线程文件系统树遍历

java - Asterisk对IVR和java命令行程序的定制

带 GUI 的 Java 内存游戏 - 字符串和数组比较

java - 我发现我的代码在 "socket socket = serverSocket.accept();"之后没有跟随,程序卡在这里

java - 安卓套接字 : receiving data in real-time

ios - 在 iOS 6 上第二次未设置值。线程问题?

java - 安卓逐帧动态壁纸动画

java - 马文 : How to deploy with deploy-file and custom wagon