SyB*_*Ber 2 java sockets networking memory-leaks
我试图在我们的 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)
Run Code Online (Sandbox Code Playgroud)
依此类推,直到它吃掉所有可用的描述符并导致“文件太多”错误。
知道什么会导致这种情况吗?
提前致谢!
CLOSE_WAIT意味着连接已被远程对等方关闭,但套接字正在等待本地应用程序关闭它。所以你不会那样做。
您需要检查您是否正确处理了 EOS,即在可能出现的所有情况下关闭套接字,并且IOExceptions在任何套接字操作上也是如此 -除了关闭套接字之外,您必须响应所有这些SocketTimeoutException。您还必须确保套接字在finally块中关闭。