在了解了在wsl2上运行Docker时的性能改进之后,我一直在等待支持wsl2的Windows 10正式发行版。 我更新了Windows和Docker,并打开了Docker标志以使用wsl2,并希望提高运行在Docker容器中的Oracle数据库的性能,但是不幸的是,此更改大大降低了容器和笔记本电脑的速度。 容器的性能大约慢10倍,启动容器时,我的笔记本电脑几乎卡住了。 似乎内存消耗将完全用完我的8GB内存,开始进行大量内存交换。 我可以做些什么来提高Docker在wsl2上的性能,或者至少更好地了解我的设置中有什么问题?
我的环境:
答案 0 :(得分:13)
这来自“ vmmem”,它消耗尽可能多的资源。 要解决该问题,只需转到您的用户文件 对我来说
C:\ Users \ userName
在此目录中,创建一个名为“ .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) 如果不起作用,请重新启动计算机。
我希望它能对您有所帮助。
答案 1 :(得分:7)
您可能像在
中那样将代码保存在Windoes机器上C:\\Users\YourName\projects\blahfu
但是您正在WSL 2上使用docker,然后在另一个文件系统上使用。因此,如果您执行docker构建,则将所有代码/上下文从Windowsfilesystem复制到Linux文件系统,然后从那里复制到docker容器。这花费了大部分时间,而且速度非常慢。
尝试将您的项目放入
/home/YouName/projects/blahfu
这应该会大大提高性能。
答案 2 :(得分:3)
wsl容器具有与Windows文件系统隔离的适当文件系统。 基本思想是将源代码从Windows文件系统复制到wsl文件系统。
您可以从窗口访问wsl容器,并将您的项目复制到wslcontainer中:
与资源管理器导航到\\wsl$
从此位置重建容器,即可完成操作!
答案 3 :(得分:1)
如果实际docker容器的数据存储在Windows文件系统(即NTFS)上,而不是存储在本地linux文件系统上(不管docker容器的内容是什么,可能已经基于linux),那么我认为运行WSL并使用已安装的WINDOWS文件系统(即/ c / mnt / ...)中的docker容器会导致性能下降。
如果将Docker容器复制到WSL上的/ usr / local或/ home // docker之类的文件,则性能可能会提高10倍。试试看,看看是否可行?
答案 4 :(得分:1)
您需要编辑“vmmem”资源 只需在路径中添加文件 .wslconfig
<块引用>C:\Users
使用 .wslconfig 配置全局选项
Available in Windows Build 19041 and later
您可以通过将 .wslconfig 文件放入用户文件夹的根目录中来配置全局 WSL 选项:C:\Users
wsl --shutdown
关闭 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
答案 5 :(得分:0)
如果您使用的是 VS Code,则有一个名为“Remote-Containers: Clone Repository in Container Volume...”的命令可确保您可以全速访问文件。
形成here:
<块引用>存储库容器使用独立的本地 Docker 卷而不是绑定到本地文件系统。除了不会污染您的文件树之外,本地卷还具有提高 Windows 和 macOS 性能的额外好处。
答案 6 :(得分:-3)