我的环境: - 处理器:Intel(R) Core(TM) i7-2620M CPU @ 2.70GHz,2个核心 - 安装的物理内存(RAM):8.00 GB - Microsoft Windows 10 Pro 版本 10.0.19041 Build 19041 - Docker 版本 19.03.8,构建 afacb8b
这来自于“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
现在关闭你的 Docker 并等待任务管理器中的 "vmmem" 关闭。
然后您可以重新启动 Docker,通常情况下 "vmmem" 不会超过您设置的限制(这里是 900MB)。 如果不起作用,请重新启动计算机。
希望对您有所帮助。
.wslconfig
文件可以减少资源消耗,但实际上会使容器本身比以前更慢。我想我只是没有足够的内存,不得不继续使用Docker而无法利用wsl2的优势。 - doberkofler.wslconfig
限制内存可以极大地提高 Docker 的性能。如果没有限制,Docker 似乎会使用尽可能多的资源。将 Docker 限制在 memory=6GB
对于我的 16GB 机器而言,使用 Docker 变得更加流畅。最佳设置可能会取决于可用的 RAM 和你在 Docker 中做什么,但我猜想,在许多情况下将其设置为(相当多!)超过 500MB 可能是明智的选择! - Nick Fdocker build
期间编译程序时,Vmmem
会消耗我机器上所有可用的CPU。当编译停滞不前时,我的机器实际上几个小时都无法响应,只能使用kill -9
命令杀死docker进程。将memory
和processors
分别设置为系统可用量的一半后,相同的构建过程只需要约10分钟即可完成。谢谢! - Mike Jaremawsl.exe --shutdown
时,它最终停止了。 - Juan Calero你的代码可能存储在类似于以下文件夹的Windows机器上...
C:\\Users\YourName\projects\blahfu
但是你正在WSL 2上使用Docker,这是一个不同的(Linux)文件系统。因此,当你进行Docker构建时,所有的代码/上下文都会从Windows文件系统复制到Linux文件系统,然后从那里复制到Docker容器中。这就是最耗时且非常慢的部分。
尝试将项目放到像这样的文件夹中...
/home/YouName/projects/blahfu
您应该会获得相当的性能提升。
WSL容器将与Windows文件系统隔离。
基本思路是将源代码从Windows文件系统复制到WSL文件系统中。
从Windows中,您可以访问WSL容器并将项目复制到WSL容器中:
使用资源管理器导航到 \\wsl$
从该位置重建容器即可解决问题!
如果实际的Docker容器数据存储在Windows文件系统(即NTFS)上,而不是存储在本地Linux文件系统上(无论Docker容器内容如何,这些内容可能已经基于Linux),那么我认为您会看到较慢的性能,因为您正在运行WSL并从挂载的WINDOWS文件系统(即/c/mnt/
...)使用Docker容器。
如果您将Docker容器复制到WSL上的/usr/local
或/home/<username>/docker
之类的位置,则可能会看到10倍的性能提升。
尝试一下,看看是否有效?
使用 .wslconfig 配置全局选项。C:\Users\<你的用户名>.wslconfig
Available in Windows Build 19041 and later
wsl --shutdown
关闭WSL 2虚拟机,然后重新启动WSL实例以使更改生效。
以下是一个示例.wslconfig文件:
Console
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/zh-cn/windows/wsl/wsl-config
C:\Users<yourUserName>.wslconfig
还是 C:\Users\<yourUserName>\.wslconfig
? - David打开您的WSL2发行版(例如Ubuntu)并设置~/.docker/config.json文件。
您只需要更改以下内容:
{
"credsStore": "docker.exe"
}
"credsStore": "desktop.exe" : 超慢(超过2分钟)
"credsStore": "wincred.exe" : 快速
"credsStore": "" : 快速
它的工作非常出色。
正如Claudio所提到的,将以下行设置在wsl ubuntu服务器的~/.docker/config.json中,解决了我的问题。
{
"credsStore": "wincred.exe"
}
之前构建任何简单图像都需要5-10分钟,现在只需1-2秒即可完成。
缺点是:每次打开服务器都必须进行此更改。我尝试了https://github.com/docker/for-win/issues/9843中提到的所有解决方案,但对我来说都没有用。
docker-desktop
、docker-desktop-data
和Ubuntu
的文件夹。我点击了"Ubuntu",在/mnt/wsl/www下创建了一个"www"文件夹,并在其中创建了我的项目文件夹。我在Windows 2019容器主机上的Docker中遇到了这个问题。恢复一个在我的电脑上只需要5秒钟的操作,却需要超过10分钟的时间。后来我发现MsMgEng.exe(Defender)进程正在扫描dockerd.exe(Docker守护程序),导致CPU使用率达到了98%。
为了确定问题,你可以在进行非常缓慢的Docker构建时运行任务管理器。如果是Defender实时扫描,你会看到dockerd.exe进程的CPU使用率飙升。Defender基本上阻碍了Docker的构建!
我相信这只是Docker守护程序的问题,但我还将docker.exe和gitlab-runner.exe添加到了处理器排除列表中。处理器排除的神奇之处在于,你不必排除任何文件夹,它会自动避免扫描进程正在处理的任何文件夹。
13分钟的恢复已经成为过去式!问题解决了。你不需要在dotnet restore上使用任何特殊参数、条件或标志。