如何在 Docker WSL 2 中减少 Java 编译时间?

How to decrease Java compilation time in Docker WSL 2?

我使用 Windows,所以 Docker 有 WSL 2。 在我的项目中,我有 docker-compose 命令编译 Java 代码。 编译需要超过 15~ 分钟。 Tomcat 启动情况相同。 我试图在 .wslconfig(6GB) 中为 WSL 分配更多内存。 它对我不起作用。

我怎样才能减少编译时间?

在 WSL2 中处理大量文件时,Java 项目经常出现这种情况,性能极度下降通常是由于文件位于 Windows NTFS 文件系统(例如 C:\). WSL2 用于访问 NTFS 的 9P 协议驱动程序比本机性能慢很多。请参阅此答案的末尾以在我的系统上进行比较。

您的 Java 项目是在 NTFS 文件系统上吗?或者它是否存在于 WSL2 实例中的虚拟 ext4 文件系统中?如果答案是 NTFS,请考虑以下解决方法:

  • 将项目移动到 WSL2 实例中。请注意,将项目从其现有位置符号链接到 ext4 文件系统将不起作用。

  • 通常我会说“考虑WSL1”,但这意味着你会输Docker。但是您可以在 WSL 中创建一个具有所需编译工具的发行版。 Reportedly(我没有这样做过),你甚至可以 docker export 容器,然后 wsl --import 它进入一个新的实例。 wsl --import 命令允许您设置 --version 1.

  • 最后,我不确定这个,但您可以尝试 Docker 桌面 没有 WSL2 后端。在这种情况下,使用支持 Hyper-V 的 Docker 可能会更快。

WSL2 下 ext49P NTFS 的比较:

~/temp$ time git clone --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel.git
Cloning into 'WSL2-Linux-Kernel'...
...
real    0m40.968s
user    0m8.711s
sys     0m3.795s


/mnt/c$ time git clone --depth=1 https://github.com/microsoft/WSL2-Linux-Kernel.git
Cloning into 'WSL2-Linux-Kernel'...
...
real    8m33.582s
user    0m19.286s
sys     0m42.802s