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

时间:2010-10-24 22:08:06

标签: java file memory-leaks file-descriptor

我有一个文件描述符增加的程序。 我看到当我执行命令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 个答案:

答案 0 :(得分:4)

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

在UNIX中,文件和套接字都使用文件描述符,因此您无法关闭打开的套接字。

因此,您不会将文件保持打开状态,但实际上会将端口号锁定为不被其他程序使用。

答案 1 :(得分:3)

尝试

# lsof -p <pid>

将列出按进程ID打开的所有“文件”,可能会显示套接字绑定的ip / port。如果您的程序是客户端,则可能是因为TCP RST断开连接而没有正确清理文件描述符。