Mithril
87 天前
Windows ,或者说所有主流操作系统,进程使用的都是虚拟内存。
当一个进程申请 100G 内存的时候,并不是直接给他 100G 。而是什么都不管,直到它真正往这空间里面写入东西的时候,再去分配一块内存,然后关联到进程的虚拟地址空间里。
比如进程申请了 100G ,然后往第 0010 位置写入数据,系统会映射一块 0100 的内存,然后转换地址让它能写进去。
但这个已提交,会直接加 100G 上去。整个逻辑简单来说就是这样。
然后你这截图里面,已提交的前面那个数字,就是所有进程申请的内存总量。它可能被使用了,也可能没被用到。后面那个 82.4G ,是你实际的物理内存加上页面文件的大小。
你可以看到这里面 50G 的已提交,已经超过了你的物理内存总量。说明除了申请完没用的以外,可能已经有一部分进程关联的内存已经被换到页面文件里了。至于为什么被换出去,你可以去看看 Windows 的内存管理,有很多条件。比如长期未使用,或者有优先级更高的进程抢占等等。
但是这些进程一旦要使用这部分内存就会产生 page fault ,操作系统就要把它们从硬盘上重新读到内存里。这个过程中整个进程就会卡住等待。就是你看见的卡顿。
你想要查原因,就去看看哪些进程申请了一大堆内存,而且属于那种大部分时间没啥活动,但过一段时间抽一下风活过来一会。
当然仔细查这个比较麻烦,需要你有一定知识背景。最简单的就是随便杀掉点你自己开的后台进程,看看还卡不卡。