有一个java程序可以从一个文件夹中读取文件,进行一些处理并将输出文件写入另一个文件夹。它运行了 4 个小时并产生了一些文件,但在引发以下错误后失败:
"too many files"
然后我修改程序以关闭所有内容(BufferReader 和 BufferWriter)并再次启动该过程。但是这个时间过程刚开始就失败了,抛出以下错误:
java.io.FileNotFoundException: <file> (Too many open files)
然后我尝试运行 lsof 并搜索没有打开文件的进程。我意识到它是NetworkManager。但我不确定是否应该终止该进程。所以我重新启动了机器。即使在那之后,当我运行 java 程序时,我仍然遇到同样的错误。
在最坏的情况下,我的代码可能在没有关闭所有内容方面仍然存在一些泄漏,但是在启动该过程之后它现在仍然失败。所以我有一种感觉,之前运行的系统中有一些东西。此外,如果我在其他机器上启动相同的进程,它会在失败前运行数小时。