wsl2上的docker非常慢
在阅读了在wsl2上运行Docker时的性能改进之后,我一直在等待支持wsl2的Windows10正式发布。 我更新了Windows和Docker,打开了Docker标志以使用wsl2,并希望在Docker容器中运行的Oracle数据库能够获得一些性能提升,但不幸的是,这一更改大大降低了容器和笔记本电脑的速度。 容器的性能大约慢10倍,我的笔记本电脑在启动容器时几乎卡住了。 似乎内存消耗将完全耗尽我的8GB,大量内存交换开始发生。 我可以做些什么来提高wsl2上Docker的性能,或者至少更好地理解我的设置中的错误 我的环境:wsl2上的docker非常慢,docker,windows-10,wsl-2,Docker,Windows 10,Wsl 2,在阅读了在wsl2上运行Docker时的性能改进之后,我一直在等待支持wsl2的Windows10正式发布。 我更新了Windows和Docker,打开了Docker标志以使用wsl2,并希望在Docker容器中运行的Oracle数据库能够获得一些性能提升,但不幸的是,这一更改大大降低了容器和笔记本电脑的速度。 容器的性能大约慢10倍,我的笔记本电脑在启动容器时几乎卡住了。 似乎内存消耗将完全耗尽我的8GB,大量内存交换开始发生。 我可以做些什么来提高wsl2上Docker的性能,或者至少更好地
- 处理器Intel(R)Core(TM)i7-2620M CPU@2.70GHz,2核
- 已安装的物理内存(RAM)8.00 GB
- Microsoft Windows 10 Pro版本10.0.19041内部版本19041
- Docker版本19.03.8,构建afacb8b
[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)
如果不工作,请重新启动计算机
我希望它对您有所帮助。您可能在Windoes机器上有您的代码,如中所示
C:\\Users\YourName\projects\blahfu
但是您在WSL2上使用docker,WSL2在另一个文件系统上。因此,如果您进行docker构建,您会将所有代码/上下文从Windows文件系统复制到Linux文件系统,然后从那里复制到docker容器。这占用了大部分时间,而且速度非常慢
试着把你的项目放到
/home/YouName/projects/blahfu
这将大大提高性能。如果实际docker容器的数据存储在windows文件系统(即NTFS)上,而不是存储在本机linux文件系统上(无论docker容器的内容是什么,可能已经基于linux),然后,我认为您将看到性能下降,因为您正在运行WSL,并使用安装的WINDOWS文件系统(即/c/mnt/…)中的docker容器
如果您将docker容器复制到WSL上的/usr/local或/home//docker,那么您可能会看到性能提高10倍。试试看它是否有效?wsl容器是否将适当的文件系统与windows文件系统隔离。 基本思想是将源代码从windows文件系统复制到wsl文件系统 从窗口,您可以访问wsl容器并将项目复制到wsl容器: 使用资源管理器导航到
\\wsl$
从这个位置重建容器,这样就可以了 如果您使用的是VS代码,则会有一个名为“Remote Containers:Clone Repository in Container Volume…”的命令,该命令可确保您可以全速访问文件 表格: 存储库容器使用隔离的本地Docker卷,而不是绑定到本地文件系统。除了不会污染您的文件树之外,本地卷还可以在Windows和macOS上提高性能 您需要编辑“vmmem”资源 只需在路径中添加file.wslconfig C:\Users.wslconfig
Available in Windows Build 19041 and later
使用.wslconfig配置全局选项
Available in Windows Build 19041 and later
您可以通过将.wslconfig文件放置到用户文件夹的根目录中来配置全局WSL选项:C:\users.wslconfig。其中许多文件与WSL2相关,请记住您可能需要运行
wsl—关机
关闭WSL2VM,然后重新启动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
请看此我认为需要有关您的硬件规格和所有相关软件版本的信息。我也有这个问题,我有16gb的内存,vmmem进程正在消耗大部分内存。顺便说一句,这方面存在一个问题:当我们所有wsl2用户都在搜索如何处理卡住的窗口时……类似的问题,但是有很多记忆,在构建过程中非常感谢您的回答。Docker应该提供设置这个或什么的。是Microsoft在
.wslconfig
上的文档供参考。使用.wslconfig
文件可以减少资源消耗,但实际上会使容器本身比以前更慢。我想我只是没有足够的内存,将不得不继续使用Docker而不利用wsl2。我发现通过.wslconfig
这样限制内存对Docker的性能产生了巨大的影响。没有它,Docker似乎会尽可能多地使用资源。在我的16GB机器上将Docker限制为内存=6GB
,这使得与Docker一起工作变得更好。最佳设置可能取决于可用的RAM和您对Docker所做的操作,但我猜在许多情况下,将其设置为(相当多!)超过500MB可能是明智的!这一调整对我也产生了巨大的影响Vmmem
在docker build
期间编译程序时消耗了我机器上所有可用的CPU。我的机器在编译陷入停滞的同时,几个小时都没有响应,不得不杀死-9
docker进程。将内存
和处理器
分别设置为系统可用内存的一半后,相同的构建在约10分钟内完成。谢谢这避免了我对WSL如此厌倦以至于放弃。谢谢。我不确定我是否理解,但在我的例子中,我有一个带有Oracle数据库的Linux容器,所有数据都在容器本身内。@doberkofler在开发过程中,您应该装载您的sour