我正在 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/