java 打开的文件未清理,即使进程被终止

标签 java filehandler

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

"too many files"

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

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

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

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

最佳答案

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

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

关于java 打开的文件未清理,即使进程被终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38456408/

相关文章:

JavaFx Netbeans 生成的 Controller 没有类 public voidinitialize

java - java中的记录器和FileHandler

c# - Clickonce 应用程序和文件处理程序行为

java.io.IOException : Couldn't get lock for 异常

java - 性能影响打开和关闭文件处理程序?

java - 在 Set 中查找包含前缀的条目

Java - 更改每个类的 JTable 渲染器

java - 该键是否具有映射到内存位置的哈希表?

java - perl 文件句柄不读取名称中带有空格的文件

java - 系列课逻辑题