如何在 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 下 ext4
与 9P 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
我使用 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 下 ext4
与 9P 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