gpt4 book ai didi

java sockets - 跟踪应用程序已经创建了多少个套接字文件

转载 作者:行者123 更新时间:2023-12-02 04:11:27 25 4
gpt4 key购买 nike

我正在使用套接字在 java 中编写一个简单的应用程序。我最近遇到了一个错误:

java.net.SocketException: Too many open files

我现在有几个关于套接字的问题:

  • 我开始想知道如何避免这样的异常?因此,我如何跟踪我的应用程序已经创建了多少个套接字文件?限制是多少?

  • 而且,我的假设是否正确,socket.close() 方法会删除相应的套接字文件?

  • 套接字文件位于哪里?这个问题取决于我使用的操作系统吗?因为在 Linux 中我知道套接字是通过文件处理的(就像几乎所有其他东西一样),但我不知道 Windows 等。

最佳答案

how I could avoid exceptions like this?

  • 确保 socket.close() 始终被调用。从finally block 调用socket.close()
  • 提高打开文件的最大数量限制。
  • socket.close() 并不意味着套接字在关闭后可以立即重用。两次 MSL 后即可重复使用,因为它在关闭后进入 TIMED_WAIT 状态。因此,如果很多套接字处于 TIMED_WAIT 状态,您应该考虑使用 connection pool

how many socket-files my application already has created?

您可以通过netstat -nalp|grep {pid}|wc找到它。

what is the limit?

您可以在 Linux 中使用 ulimit -n 找到进程可以打开的最大文件数的限制。打开的套接字被视为打开的文件。可以通过修改 /etc/security/limits.conf 文件来增加此限制。

does socket.close() method delete the respective socket-file?

是的,在 Linux 中,当为该套接字调用 close() 方法时,该套接字文件将被删除。

where are the socket-files located?

在 Linux 中,打开的文件描述符位于 /proc/{pid}/fd/ 下。我不确定 Windows 的情况。

关于java sockets - 跟踪应用程序已经创建了多少个套接字文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33756961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com