1

对导致服务器因“文件打开过多”而挂起的Java程序进行故障诊断

我有一个Java程序(在Linux上)运行了一段时间,然后导致服务器锁定为“打开了太多文件”

重新启动机器后,我再次运行Java程序,然后针对它的pid执行lsof命令。产生大量具有以下输出的行:

 java 971 uknown 980u sock 0,9 0t0 20461 protocol: TCPv6

这是否意味着程序正在打开多个tcp连接而没有关闭它们?

我可以采取什么进一步的步骤来解决此问题?

已提交 November 30th 2020 通過 Admin

答案
0

这意味着您的程序正在打开文件描述符,而不是关闭它们。它可能是套接字或文件处理程序。因此,它导致资源泄漏。确保所有文件处理程序都已关闭,并准备好进行垃圾收集。

正如dan1st在评论中指出的那样,一种避免这种情况的预防措施是使用try-with-resources。这将实现AutoClosable接口,并确保自动关闭资源。

Admin | 10个月前



枪支相关