当我在程序之间切换时,我的工作电脑(Windows 7 64 位)会花费大量时间交换内存。这让我很惊讶,因为我有 4 GB 的 RAM,而且我使用的程序并不特别耗内存(Outlook、Emacs、p4win、Firefox、各种构建工具)。我下载了内存地图,它显示“Metafile”使用了超过 1GB 的内存。
图元文件是系统缓存的一部分,由 NTFS 元数据组成。NTFS 元数据包括 MFT 以及其他各种 NTFS 元数据文件。... 在 MFT 中,每个文件属性记录占用 1k,每个文件至少有一个属性记录。再加上其他 NTFS 元数据文件,您就会明白为什么在拥有大量文件的服务器上,图元文件类别会变得非常大。
所以我理解“图元文件”数据是什么...我处理包含数十万个文件的大型构建(没有一个文件那么大,但它们加起来有几千兆字节)。我的问题是我怎样才能减少“Metafile”使用的内存量?我并不会一次性使用所有这些文件,那么 Windows 为何需要将信息保存在 RAM 中?每次同步新版本时都要重新启动计算机,这真的很烦人。
答案1
我相信系统缓存会在需要时释放内存,但可能会出现故障。下面列出了一些可能性。
您的 64 位系统在前 4GB 内存中分配视频内存。因此,如果您的视频卡有大量内存,则该内存将丢失,如下所述:
基于 Windows 7 的计算机上的可用内存可能小于已安装的内存
您可以通过打开设备管理器并在“查看”菜单下选择“按连接查看资源”来检查计算机上的内存使用情况。展开“内存”节点,看看您是否能找出占用内存的设备(如果有的话)。在某些情况下,可以通过禁用未使用的设备(如火线)来增加内存。
您还可以尝试做与本文所述完全相反的事情:
在 Windows 7 中增加文件系统内存缓存大小
您还可以尝试禁用 Windows 7 SuperFetch。
如果没有任何帮助,发布名为“性能”的任务管理器选项卡的屏幕截图将会很有用。
答案2
Windows Server 2008 R2 遇到了完全相同的元文件“缓存”问题,即太多的元文件信息保存在活动内存中,因此在出现内存压力时缓存功能没有权限释放这些内存。
我在 serverfault.com 页面上编写了一个 powershell 脚本Windows Server 2008 R2 图元文件 RAM 使用情况这会将最大图元文件活动内存设置为合理的值。其余内存将移至备用内存,然后正常缓存功能可以适当地确定优先级。Windows 7 x64 和 Server 2008 R2 x64 都对图元文件数据默认的最大活动内存限制为 1TB。是的,是 TB,不是 GB。
Work 现在在我们所有站点的服务器上运行该脚本,这些服务器负责组织站点的备份,每天在备份周期中处理数百万个文件。这些备份服务器还运行内存密集型 Java 程序 (VMware vSphere)、2 个 SQL 服务器和带有自己的 SQL 服务器的 WSUS。备份软件首先读取元数据(名称、大小、修改日期、权限、属性等)以确定将在此过程中备份的文件列表,它非常快地填满了元文件缓存。即使完成所有这些操作,它们也仅使用 4GB 的 RAM 就能顺利运行。