0

有一个java程序可以从一个文件夹中读取文件,进行一些处理并将输出文件写入另一个文件夹。它运行了 4 个小时并产生了一些文件,但在引发以下错误后失败:

"too many files"

然后我修改程序以关闭所有内容(BufferReader 和 BufferWriter)并再次启动该过程。但是这个时间过程刚开始就失败了,抛出以下错误:

java.io.FileNotFoundException: <file> (Too many open files)

然后我尝试运行 lsof 并搜索没有打开文件的进程。我意识到它是NetworkManager。但我不确定是否应该终止该进程。所以我重新启动了机器。即使在那之后,当我运行 java 程序时,我仍然遇到同样的错误。

在最坏的情况下,我的代码可能在没有关闭所有内容方面仍然存在一些泄漏,但是在启动该过程之后它现在仍然失败。所以我有一种感觉,之前运行的系统中有一些东西。此外,如果我在其他机器上启动相同的进程,它会在失败前运行数小时。

4

1 回答 1

1

即使您愿意,也无法在程序运行之间保留资源。理论上你可以让你的系统没有足够的资源,虽然不太可能,但重新启动机器应该可以解决这个问题。

更有可能的是,您拥有的文件足以触发程序耗尽文件句柄。尝试重命名您存储文件的目录并从一个空目录开始以确认这一点。

于 2016-07-19T10:52:31.320 回答