java - 当目录中有许多文件时,与 Windows 主机共享的卷内的容器中的 "ls"会卡住

标签 java spring-boot docker docker-desktop volumes

背景

我正在 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/

相关文章:

java - 尝试使用 twitter4j 更新状态时出现错误 401

Java BigDecimal 可能的溢出错误

java - Spring Boot 2属性配置

java - 相同的 build.gradle 文件获取不同版本的依赖项(org.json :json)

user-interface - 通过 ssh 转发 x11 时后台会发生什么?

java - 许多静态方法是否会增加程序内存/静态库

Java正则表达式错误/问题([是什么类型的字符)?

spring - 使用 HttpEntity<List> 在 Spring RestTemplate 中删除

docker - 如何更改 elasticsearch docker 容器内目录的所有者权限?

django - uWSGI与Docker的Supervisord一起提供的应用程序