62

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

我的环境:

  • 处理器 Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz, 2 Core(s)
  • 安装的物理内存 (RAM) 8.00 GB
  • Microsoft Windows 10 专业版 10.0.19041 内部版本 19041
  • Docker 版本 19.03.8,构建 afacb8b
4

6 回答 6

56

这来自“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

现在关闭你的泊坞窗并等待“vmmem”在任务管理器中关闭。

然后您可以重新启动 docker,通常“vmmem”不会超过您设置的限制(此处为 900MB)如果不起作用,请重新启动计算机。

我希望它对你有所帮助。

于 2020-06-13T01:00:48.053 回答
24

您可能将代码存储在 Windows 机器上类似于此的文件夹中...

C:\\Users\YourName\projects\blahfu

但是您在 WSL 2 上使用 Docker,这是一个不同的 (Linux) 文件系统。因此,当您进行 Docker 构建时,所有代码/上下文都会从 Windows 文件系统复制到 Linux 文件系统,然后再从那里复制到 Docker 容器。这是最耗时的,而且速度非常慢。

尝试将您的项目放入这样的文件夹中......

/home/YouName/projects/blahfu

你应该得到相当大的性能提升。

于 2020-07-23T13:33:17.187 回答
14

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

从窗口您可以访问 wsl 容器并将您的项目复制到 wslcontainer :

使用资源管理器导航到\\wsl$

从这个位置重建容器,这样就可以了!

于 2020-11-14T01:34:03.150 回答
2

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

如果您将 docker 容器复制到 /usr/local 或 WSL 上的 /home//docker 之类的位置,那么您可能会看到 10 倍的性能提升。试试看它是否有效?

于 2020-09-22T22:56:53.417 回答
2

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

C:\Users<您的用户名>.wslconfig

使用 .wslconfig 配置全局选项

Available in Windows Build 19041 and later

您可以通过将 .wslconfig 文件放入用户文件夹的根目录中来配置全局 WSL 选项:C:\Users<yourUserName>.wslconfig。其中许多文件与 WSL 2 相关,请记住您可能需要运行

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://docs.microsoft.com/en-us/windows/wsl/wsl-config

于 2021-04-22T05:19:25.060 回答
0

如果您使用的是 VS Code,则有一个名为“Remote-Containers: Clone Repository in Container Volume...”的命令可确保您可以全速访问文件。

形成文档

存储库容器使用隔离的本地 Docker 卷,而不是绑定到本地文件系统。除了不会污染您的文件树之外,本地卷还具有提高 Windows 和 macOS 性能的额外好处。

于 2021-03-21T16:43:00.447 回答