背景
我正在 Docker 容器(Ubuntu 镜像)中运行 Spring Boot 应用程序。
该代码是用 Kotlin 编写的,它会遍历磁盘上包含 300,000 个文件的目录。
我运行以下代码:
File(dir)
.walk()
.forEach{logger.info("{}", it.name)}
并且此代码阻塞至少 10 分钟。
我希望调用 walk 后不久就会开始打印行。
事实上,当从 Intellij 运行代码时,代码可以按预期工作——也就是说,不在容器中运行。
问题:
为什么会发生这种情况以及如何解决它?
<小时/>我尝试过的
第一次审判
我尝试只调用 File.listfiles 并记录文件数量,如下所示:
val count = File(dir).listFiles().size
logger.info("{}", count)
这也阻塞了很长时间并最终记录了值 0。
第二次审判
我更改了 Docker Desktop 的设置。
我将 RAM 增加到 20 GB,交换文件增加到 1 GB
这对结果没有影响。
最佳答案
已关注 Stefan Golubovic我意识到这个问题可能与kotlin或java无关,而更有可能与Docker for Desktop中卷的实现有关。
因此我提交了一个更有针对性的问题here我将关闭这个。
关于java - 当目录中有许多文件时,与 Windows 主机共享的卷内的容器中的 "ls"会卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60644956/