3

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

请帮助我找到解决此文件描述符泄漏的方法,以了解哪些文件保持打开状态并增加文件描述符编号。

4

2 回答 2

5

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

在 UNIX 中,文件和套接字都使用文件描述符,因此您会遇到一个问题,即您没有关闭打开的套接字。

结果,您并没有打开文件,而是实际上将端口号锁定以防止其他程序使用。

于 2010-10-24T22:15:29.263 回答
5

尝试

# lsof -p <pid>

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

于 2010-12-18T01:35:10.793 回答