我有一个文件描述符增加的程序。 我看到当我执行命令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]
在知道哪些文件保持打开状态并增加文件描述符编号时,请帮我找到解决此文件描述符泄漏的方法。
答案 0 :(得分:4)
嗯,从快速观察,您在套接字上使用文件描述符,而不是文件
在UNIX中,文件和套接字都使用文件描述符,因此您无法关闭打开的套接字。
因此,您不会将文件保持打开状态,但实际上会将端口号锁定为不被其他程序使用。
答案 1 :(得分:3)
尝试
# lsof -p <pid>
将列出按进程ID打开的所有“文件”,可能会显示套接字绑定的ip / port。如果您的程序是客户端,则可能是因为TCP RST断开连接而没有正确清理文件描述符。