背景
小弟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