背景

小弟David最近从开始使用Windows 10 预览版,因为需要在WSL上面跑CUDA的东西。然而这个Win10 预览版的小问题实在太多。其中一个问题就是vmmem进程占用CPU资源。

今天一开机,就发现风扇疯狂的转阿转。打开任务管理器一看,发现有个叫做vmmem的进程占用了不少CPU资源。上网一查,发现原来这个进程是代表着所有虚拟机的CPU与内存总开销。这里有一篇微软的开发者blog有说明:
https://devblogs.microsoft.com/oldnewthing/20180717-00/?p=99265

寻找原因

因此,vmmem进程占用资源其实就表示有虚拟机在占用着资源。让我们来排查一下有哪些虚拟机在我们的电脑上运行。首先,我们可以先通过下面这个指令来关闭Windows Subsystem for Linux (WSL)虚拟机。打开powershell,输入:

wsl --shutdown

尝试关闭WSL虚拟机之后再看看任务管理器,vmmem有没有消失?

如果没有的话,我们再打开win10的hyper-v manager来检查看看有没有其他的虚拟机。
在这里插入图片描述
从Hyper-V Manager中可以看到,有一个叫做 DockerDesktopVM 的虚拟机正在运行着。这还蛮奇怪的,因为我并没有打开Docker Desktop (如下图)。
在这里插入图片描述
为了一探究竟,那么我们连接到DockerDesktopVM里面看看它在做什么。

右键点击DockerDesktopVM并选择连接。
在这里插入图片描述
在这里插入图片描述
进去DockerDesktopVM之后我们发现该虚拟机正在尝试一些操作。但是因为我们没有打开Docker Desktop,所以DockerDesktopVM的连接操作总是失败,并且在失败之后还会不停重复尝试连接。

正是因为这些无限循环的尝试连接->失败->尝试连接的操作,导致许多CPU资源被浪费掉了。

解决办法

David的做法是直接在Hyper-V Manager里删除DockerDesktopVM,然后打开Docker Desktop。Docker Desktop会重新启动一个新的DockerDesktopVM。接着再退出Docker Desktop,于是DockerDesktopVM也会随之关闭。至此,vmmem进程也就消失了。

下次遇到类似的问题,解决的大体思路就是看看本机的哪些虚拟机在运行,哪些可能占用资源,一个一个排查看看。

可以从这两处常见的地方开始排查:

  • Windows Subsystem for Linux (WSL)

  • Hyper-V Manager

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐