zac*_*cky 3 java memory-leaks file 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]
Run Code Online (Sandbox Code Playgroud)
请帮助我找到解决此文件描述符泄漏的方法,了解哪些文件保持打开状态并增加文件描述符数量。
好吧,从快速观察来看,您在套接字上使用文件描述符,而不是文件
在 UNIX 中,文件和套接字都使用文件描述符,因此您会遇到一个问题,即您没有关闭您打开的套接字。
因此,您并没有让文件处于打开状态,而是实际上将端口号锁定为其他程序无法使用。
小智 5
尝试
# lsof -p <pid>
Run Code Online (Sandbox Code Playgroud)
将列出通过进程 id 打开的所有“文件”,可能会显示套接字绑定到的 ip/端口。如果您的程序是客户端,则您可能会被 TCP RST 断开连接,并且没有正确清理文件描述符。