Windows Server 内存高排查
最近在使用 Windows 2008R2 的 时候,发现一个文件,机器有 16GB 内存,内存使用率达到了 14GB 左右,但是登陆机器使用任务管理器和资源管理器查看内存使用发现一个奇怪的问题,
那就是当前机器上所有进程的内存使用加在一起大概只有 4-5GB 左右,剩下将近 8 个 GB 的内存不知道被什么进程占用了。而且在任务管理器中,打开内存 - 工作集(检查进程物理内存的占用)和 内存 - 提交大小(非保留的虚拟内存空间)也没有找到这个进程。
后来我使用 RAMMap 工具来进行查看。因为在任务管理器的监控窗口中查看不到占用内存异常的进程,但物理内存显示已经负载的状态。这种情况一般是系统底层有占用内存的情况,这个时候需要通过RAMMap工具查看系统内存的占用情况,该工具是微软官方的软件,打开RAMMap,可以查看任务管理器中不显示的系统占用内存的情况。
当我打开 RAMMap 以后,在 UseCounts 页面,我对内存使用按照 Total 进行排序,发现内存占用最大的是 Metafile ,在我的这个机器上占用了 8GB 的内存,加上其他应用程序的 4-5GB,整个机器的总体内存使用率在 80% 以上。

接下来我们看看 Metafile 是什么。
Metafile 是包含 NTFS 元数据的系统缓存的一部分,用于提高文件系统访问文件时的性能。NTFS元数据包括MFT(Master File Table)的数据。对于用户访问的每个文件或文件夹,在 Metafile 中创建一个至少1kb的对应块(每个文件的一个属性的记录是1kb,并且每个文件至少有一个属性)。因此,在具有大量文件的文件服务器上,Metafile 大小(NTFS缓存)可能超过几十GB。
我们不能简单的通过禁用这个缓存或使用内置的 Windows 工具来对 Metafile 进行管理它,虽然也可以对大小进行调整,但是在有些时候,内存中的 Metafile 的大小会快速增长。我们可以尝试将操作系统进行升级,升级到 Windows Server 2016 或以上来进行彻底解决。
找到找到原因以后,就可以进行解决问题了。对于 Metafile 文件,可以在 RamMap 软件里进行清空,也可以通过重启机器进行释放。