WSL2上的码头非常慢

在了解了在 wsl2上运行 Docker 时的性能改进之后,我一直在等待支持 wsl2的 Windows10的正式发布。 我更新了 Windows 和 Docker,打开 Docker 标志使用 wsl2,希望能够提高在 Docker 容器中运行的 Oracle 数据库的性能,但不幸的是,这个改变使容器和笔记本电脑的运行速度大大减慢。 这个容器的性能要慢10倍,而且在启动这个容器时,我的笔记本电脑基本上卡住了。 看起来好像内存消耗将完全用完我的8GB 和大量的内存交换开始发生。 我是否可以做些什么来提高 Docker 在 wsl2上的性能,或者至少更好地理解我的设置中出了什么问题?

我的环境:

  • 处理器 Intel (R) Core (TM) i7-2620M CPU@2.70 GHz,2 Core (s)
  • 安装的物理内存(RAM)8.00 GB
  • Microsoft Windows 10 Pro Version 10.0.19041 Build 19041
  • Docker 版本19.03.8,构建 afacb8b
74441 次浏览

这来自“ vmmem”,它消耗尽可能多的资源。 要解决这个问题,只需转到您的用户文件 为了我

C: 用户用户名

在这个目录中创建一个名为“ . wslconfig”的文件,您将在其中配置可以使用 WSL2的资源数:

[wsl2]
memory=900MB    #Limits VM memory in WSL 2 to 900MB
processors=1    #Makes the WSL 2 VM use one virtual processors

现在关闭您的 Docker,并在任务管理器中等待“ vmmem”关闭。

然后可以重新启动 docker,通常“ vmmem”不会超过您设置的限制(这里是900MB) 如果不工作,重新启动计算机。

希望对你有帮助。

您可能将您的代码存储在 Windows 计算机上的一个文件夹中,该文件夹类似于..。

C:\\Users\YourName\projects\blahfu

但是您正在 WSL2上使用 Docker,这是一个不同的(Linux)文件系统。因此,当您进行 Docker 构建时,所有的代码/上下文都会从 Windows 文件系统复制到 Linux 文件系统,然后从那里复制到 Docker 容器。这是花费最多时间和难以置信的缓慢。

试着把你的项目放到这样的文件夹中..。

/home/YouName/projects/blahfu

你的表现会得到很大的提升。

如果实际的 docker 容器的数据存储在 WINDOWS 文件系统(即 NTFS)上,而不是存储在本地 Linux 文件系统上(不管 docker 容器的内容是什么,可能已经是基于 Linux 的) ,那么我认为您将看到缓慢的性能,因为您正在运行 WSL 并使用来自安装的 WINDOWS 文件系统的 docker 容器(即/c/mnt/...)。

如果将 docker 容器复制到 WSL 上的/usr/local 或/home//docker,那么可能会看到10倍的性能 INCREASE。试试看有没有用?

Wsl 容器具有与 Windows 文件系统隔离的正确文件系统。 基本思想是将源代码从 windows 文件系统复制到 wsl 文件系统。

您可以从 window 访问 wsl 容器并将项目复制到 wslContainer:

用浏览器导航到 \\wsl$

从这个位置重建容器,这将做的诀窍!

如果您正在使用 VS Code,那么有一个名为“ Remote-Container: Clone Repository in Container volu...”的命令,它可以确保您能够全速访问文件。

表格 文件:

存储库容器使用独立的本地 Docker 卷,而不是绑定到本地文件系统。除了不会污染文件树之外,本地卷还可以提高 Windows 和 macOS 上的性能。

您需要编辑“ vmmem”资源 只需在路径中添加 file.wslconfig

C: Users < yourUserName > . wslconfig

使用. wslconfig 配置全局选项

Available in Windows Build 19041 and later

可以通过放置一个。将 wslconfig 文件放入您的 Users 文件夹的根目录: C: Users < yourUserName > 。Wslconfig.这些文件中有许多与 WSL2相关,请记住您可能需要运行

WSL ——关闭

关闭 WSL 2 VM,然后重新启动 WSL 实例以使这些更改生效。

下面是一个示例.wslconfig 文件:

控制台

Copy
[wsl2]
kernel=C:\\temp\\myCustomKernel
memory=4GB # Limits VM memory in WSL 2 to 4 GB
processors=2 # Makes the WSL 2 VM use two virtual processors

看看这个 https://learn.microsoft.com/en-us/windows/wsl/wsl-config