java - 当目录中有许多文件时,与 Windows 主机共享的卷内的容器中的“ls”会卡住
问题描述
背景
我在 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 中卷的实现有关。
因此,我在这里提交了一个更集中的问题,我将关闭这个问题。
推荐阅读
- java - 如何比较java中相同方法的输入
- c# - 读取按数字行访问的行
- ios - Notification Service Extension 是否需要单独的配置文件?
- sql-server - 按分区估算男性和女性客户
- ruby-on-rails - 如何在 GemFiles 中加载 Figaro ENV 变量?
- javascript - 如何删除字符串中的所有内容,直到 Google Apps 脚本中的窗帘字符
- haskell - 使用递归的haskell中的随机数生成器
- flutter - 如何在颤动中定位文本?
- html - Puppeteer 使用 xlink:href 查找 svg
- python - 如何绘制优化的进度?