有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java程序中的文件描述符泄漏:打开的文件太多

我有一个程序,文件描述符增加。 我看到当我执行ls-l/proc/5969/fd命令时,其中5969是java程序的pid,文件描述符的数量不断增加。 但我无法打开其中一个文件描述器来查看哪些文件仍然处于打开状态: 以下是清单的一个示例:

lrwx------ 1 root root 64 oct 24 16:08 52295 -> socket:[2577706264]
lrwx------ 1 root root 64 oct 24 16:08 52296 -> socket:[2579543392]
lrwx------ 1 root root 64 oct 24 16:08 52297 -> socket:[2578760962]

请帮助我找到一种方法来解决这个文件描述符泄漏,知道哪些文件仍然打开,并增加文件描述符的数量


共 (2) 个答案

  1. # 1 楼答案

    通过快速观察,您在套接字上使用的是文件描述符,而不是文件

    在UNIX中,文件和套接字都使用文件描述符,因此如果不关闭打开的套接字,就会出现问题

    因此,您并没有让文件保持打开状态,而是让端口号被其他程序锁定

  2. # 2 楼答案

    试试看

    # lsof -p <pid>
    

    将列出按进程id打开的所有“文件”,可能会显示套接字绑定到的ip/端口。如果你的程序是客户端的,你可能会被TCP RST断开连接,并且没有正确地清理文件描述符