如何减少 `vmmem` 进程的消耗?

Cia*_*lsh 42 memory resources docker windows-10

我在使用 WSL2 作为后端的 windows home 上安装了 docker。但是,由于执行此操作,称为进程vmmem似乎一直在消耗大量计算资源。我跑去docker stop $(docker ps -aq)杀死所有正在运行的容器(有 12 个 - 哎呀),这显着改善了这个问题。然而,即使在关闭 docker 之后vmmem,仍然需要约 1.5 - 2Gb 的内存和约 20% 的 CPU。既然没有任何容器在运行,那么资源消耗不是vmmem应该最小吗?我怎样才能减少vmmem过程的消耗?

小智 57

丹尼尔 B 很有钱。要关闭 Vmmem,只需进入 Powershell 或您喜欢在管理员权限下使用的任何终端并输入命令wsl --shutdown,当您完成在 wsl1/2 中的播放后。

  • 这不能回答问题 - 我需要运行我的码头工人,但我只想限制 RAM 消耗 (10认同)
  • 这几乎回答了你的问题。只要您使用 docker(或任何使用 WLS2 作为后端的东西),您就会看到 vmmem 消耗您的 RAM。如果你运行你的dockers,vmmem就会在那里。 (5认同)

小智 15

Linux 正在消耗内存来缓存文件。buff/cache在命令部分可以看到free。要删除缓存,只需运行echo 3 | sudo tee /proc/sys/vm/drop_caches.


Lor*_*nzo 13

vmmem即使在 docker 关闭后,它也会在完全关闭之前运行几秒钟到 1 分钟。所以尝试关闭你的容器和 docker,它应该很快就会消失。

接受的答案谈到关闭WSL(Linux 的 Windows 子系统),如果您实际打开并安装了发行版,这很有意义,但是既然您提到了Docker,我猜您vmmem只是在展示 docker 容器的使用情况。

这是一个值得信赖的人的很好的解释:https : //devblogs.microsoft.com/oldnewthing/20180717-00/?p=99265

  • 同样,关闭所有 WSL 终端一分钟后,“vmmem”就会消失 (3认同)
  • 这有效。关闭 Docker 桌面,一分钟后,“vmmem”从任务管理器中消失。 (2认同)
  • 应该接受答案。 (2认同)

小智 12

我编辑WSL配置限制内存的使用所提到这里

# turn off all wsl instances such as docker-desktop
wsl --shutdown
notepad "$env:USERPROFILE/.wslconfig"
Run Code Online (Sandbox Code Playgroud)

为 CPU 核心和内存设置所需的值

[wsl2]

memory=3GB   # Limits VM memory in WSL 2 up to 3GB
processors=4 # Makes the WSL 2 VM use two virtual processors
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案 (9认同)
  • 这也是一个很好的答案,或者应该成为核心答案的一部分。限制虚拟机限制有助于保持系统可用。 (6认同)

小智 9

如果你想停止 vmmem 进程,试试这个方法

  1. 打开开始菜单 -> 只需键入即可找到“Hyper-V Manager”
  2. 停止虚拟机->右键->关闭

在此输入图像描述


小智 9

我只是%UserProfile%\.wslconfig用这两行创建了文件,其他所有内容都保持不变。效果很好。

[wsl2]
memory=8GB
Run Code Online (Sandbox Code Playgroud)

添加 WSL 文件以获取新设置后,我立即完全关闭。

$ wsl --shutdown
Run Code Online (Sandbox Code Playgroud)

请在此处查看 Microsoft 提供的其他信息:WSL 中的高级设置配置


小智 8

通过在 PowerShell 中右键单击并以管理员模式运行以下命令,重新启动 WSL2:

Restart-Service LxssManager
Run Code Online (Sandbox Code Playgroud)


Pat*_*atS 7

当我看到这个问题时,这个问题已经存在了大约 2 年,我现在才看到这些问题。可能是因为在 Windows 的 Docker 中启用了 Kubernetes(我不确定)。

我能够使用wsl --shutdown释放内存但禁用 Docker 的命令关闭 Windows Linux 子系统 (WSL)。

因此,我按照建议更新了我的~/.wslconfig文件(又名)以减少内存。%USERPROFILE%\.wslconfig我相信这有帮助。

后来发现我的 WSL 子系统已经过时,并且没有通过 Windows 更新进行更新(默认情况下),因为我禁用了Receive updates for other Microsoft products when you update Windows.

所以我启用了它,并运行wsl --update(在管理 shell 中),我的 WSL 版本从 3/16/21 ( ) 更新Kernel Version 5.4.72到今天 (5/2/22) ( Kernel Version 5.10.102.1)。

我希望这也会有所帮助。