Java Open File 目录句柄

问题描述 投票:0回答:1

通过检查 Java 应用程序,我们发现它似乎在收集文件句柄。当我们使用 lsof 检查保存了哪些文件时,它们都是目录。我们不使用 WatchService 或类似的东西,但我们执行一堆文件操作,例如读取、复制等。

我知道 Java try-with-resource 用于关闭打开的文件流,但这里我们讨论的都是目录。在网上搜索时,似乎没有关于如何正确关闭或泄漏目录文件句柄的内容。

有趣的是,我们的暂存环境中没有此类问题,但负载也较少。

我所知道的是,我们从中复制的硬件和共享是非常不稳定的 cifs 共享。但是打开的文件夹句柄都在我们本地磁盘上...

您是否知道任何具体问题,文件夹文件句柄如何泄漏,或者如果我们知道底层硬件可能存在问题,是否有任何方法可以防止这种情况?

Increasing File Handles

java filehandle
1个回答
0
投票

经过一番大量调试后,我发现以下代码会泄漏:

Files.list(parent).findAny().isEmpty

Files.list 的文档说

The returned stream contains a reference to an open directory. The directory is closed by closing the stream.

虽然流是通过终端操作关闭的,但情况似乎并非如此,至少对于 findAny 来说是这样。 感谢 @Andrey 给我指点 Files.walk

© www.soinside.com 2019 - 2024. All rights reserved.