我在使用 WSL2 作为后端的 windows home 上安装了 docker。然而,由于这样做,一个名为的进程vmmem
似乎一直在消耗大量的计算资源。我跑去docker stop $(docker ps -aq)
杀死所有正在运行的容器(有 12 个 - 哎呀),这大大改善了这个问题。然而,即使在关闭 docker down 之后,vmmem
仍然占用 ~1.5 - 2Gb 的内存和 ~20% 的 CPU。既然不再有任何容器在运行,那么资源消耗不应该vmmem
是最小的吗?我怎样才能减少vmmem
进程的消耗?
丹尼尔 B 很赚钱。要关闭 Vmmem,只需进入 Powershell 或您喜欢在管理员权限下使用的任何终端并输入命令
wsl --shutdown
,当您在 wsl1/2 中玩完后。我编辑 WSL 配置以限制此处提到的内存使用量。
为 CPU 内核和内存设置所需的值:
vmmem
即使在 docker 关闭后,它也会在完全关闭之前运行几秒钟到 1 分钟。因此,请尝试关闭您的容器和 docker,它应该很快就会消失。接受的答案谈到关闭
WSL
(Linux 的 windows 子系统),如果您实际打开并安装了发行版,这很有意义,但是既然您提到了Docker
,我猜您vmmem
只是显示了 docker 容器的使用。这是一个值得信赖的人的一个很好的解释:https ://devblogs.microsoft.com/oldnewthing/20180717-00/?p=99265
编辑:
考虑到主要问题是关于如何减少 RAM 的消耗,并且由于您使用的是 docker;看看:Docker 资源限制
更具体地说,该
--memory=2g
参数可以限制容器将使用的 RAM,而容器vmmem
本身也将使用更少的 RAM。重启 WSL2,通过在 PowerShell 中运行以下命令右键单击并以管理员模式运行:
Linux 正在消耗内存来缓存文件。可以在命令
buff/cache
部分看到。free
要删除缓存,只需运行echo 3 | sudo tee /proc/sys/vm/drop_caches
.如果要停止 vmmem 进程,请尝试这种方式
就我而言,我没有安装 WSL,但有 Docker。我不优雅地关闭了 docker 进程,但后来注意到 vmmem 正在使用大量 CPU。Windows 不允许我终止 vmmem 进程。
我不得不再次打开 Docker 并通过系统托盘图标优雅地关闭它。之后 vmmem 根本不再运行。
根据此线程:https ://github.com/microsoft/WSL/issues/6982 ,在 .wslconfig 中使用内存设置并不总是有效。
解决方案似乎是:
\Users\<USERPROFILE>\.wslconfig
(如果文件不存在则创建文件)wsl --shutdown
(它说的是关闭,但实际上它会停止并重新启动所有正在运行的 wsl 发行版)当我看到这个问题时,这个问题大约有 2 年的历史,而我刚刚遇到这些问题。可能是因为在 Docker for Windows 中启用了 Kubernetes(我不确定)。
我能够使用
wsl --shutdown
释放内存但禁用 Docker 的命令关闭适用于 Linux 的 Windows 子系统 (WSL)。所以,我按照建议更新了我的
~/.wslconfig
文件(又名%USERPROFILE%\.wslconfig
)以减少内存。我相信这有帮助。后来发现是我的 WSL 子系统已过期,并且没有使用 Windows 更新(默认情况下)更新,因为我禁用了
Receive updates for other Microsoft products when you update Windows
.所以我启用了它并运行
wsl --update
(在管理 shell 中),我的 WSL 版本从 21 年 3 月 16 日(Kernel Version 5.4.72
)更新到今天(22 年 5 月 2 日)(Kernel Version 5.10.102.1
)。我希望这也会有所帮助。
会不会和这个有关????
对于我的问题,vmmem 的高 CPU 和高 RAM 使用率,我已经尝试了所有可以在此处和其他地方查找的 WSL2 解决方案。似乎对于某些类型的任务,WSL2 会吃掉你的记忆,完成后不会吐出来……
使用 WSL 1 而不是 WSL 2 的例外情况:
我不需要 WSL2 来完成这个特定的任务......我现在正在尝试 WLS1......
我会发布一个关于它是如何进行的更新......
更新:转移到 WSL1,似乎在运行许多子进程时为我解决了这个问题。我一直在运行超过 RAM 过载并停止的时间点。