有一个java程序从文件夹中读取文件,进行一些处理并在另一个文件夹中写入输出文件。它运行了4个小时并生成了一些文件,但在抛出以下错误后失败了:
"too many files"
然后我修改程序以关闭所有内容(BufferReader和BufferWriter)并再次启动该过程。但是这个时间过程刚刚开始时抛出以下错误就失败了:
java.io.FileNotFoundException: <file> (Too many open files)
然后我尝试运行lsof并搜索了大多数没有打开文件的进程。我意识到它是NetworkManager。但我不确定我是否应该杀死这个过程。所以我重新启动了机器。甚至在我运行java程序之后,我仍然遇到了同样的错误。
在最坏的情况下,我的代码可能仍然有一些泄漏,但没有关闭所有内容,但现在仍然在启动过程后失败。所以我感觉从前一次运行中出现了一些问题。另外如果我在其他机器上启动相同的过程,它会在失败前运行几个小时。
答案 0 :(得分:1)
即使您愿意,也无法在程序运行之间保留资源。在理论上你可能没有足够的资源离开你的系统,虽然不太可能,但重启机器应该解决这个问题。
更有可能的是,您拥有的文件足以触发程序用完文件句柄。尝试重命名存储文件的目录,并从空文件开始,以确认这一点。