减少“元文件”的内存使用量?


8

当我在程序之间切换时,我的工作计算机(Windows 7 64位)花费大量时间来交换内存。这让我感到惊讶,因为我有4 GB的RAM,并且我使用的程序并不是特别耗费RAM(Outlook,Emacs,p4win,Firefox,各种构建工具)。我下载了RAMMap,它显示了“ Metafile”使用的超过1 GB的内存。

Sysinternals博客

元文件是系统缓存的一部分,由NTFS元数据组成。NTFS元数据包括MFT以及其他各种NTFS元数据文件。...在MFT中,每个文件属性记录占用1k,并且每个文件至少具有一个属性记录。将其添加到其他NTFS元数据文件中,您会看到为什么在具有大量文件的服务器上,“元文件”类别会变得很大的原因。

因此,我了解了“元文件”数据是什么...我正在处理包含成千上万个文件的大型构建(没有那么大的文件,但它们的总和为几GB)。我的问题是如何减少“元文件”使用的内存量?我没有一次同时使用所有这些文件,所以Windows为什么需要将信息保留在RAM中?每次同步新版本时都重新启动计算机确实很烦人。


4
构建是IO密集型的,因此Windows保留了一个较大的文件系统缓存以提高性能。不幸的是,构建工具也会占用大量内存,并且通常会出现较大的峰值,这可能会导致大量内存使用。因为这与系统缓存竞争。最好的解决方案可能是添加更多的内存。
tgiphil 2011年

@tgiphil,可以理解的是,在签出或进行构建时会使用大量内存。但是,它仍在使用,并且在我仅在一个较小的区域中工作时,仍然会在以后造成抖动。不幸的是,IT不会给我更多的内存。
杰·康罗德

我认为Windows 7已经通过缓存优化了性能。因此,要增加可用内存并减少交换,请关闭所有不必要的应用程序。例如,您可以通过关闭Outlook和Firefox来获得大量内存。如果使用Visual Studio并且仅需要编译,请尝试使用命令行构建。我希望这有帮助。顺便说一句。内存如此之低(6Gb低于100美元),这是一项出色的生产力投资。
tgiphil 2011年

Answers:


4

我相信系统高速缓存会在需要时释放其内存,但是可能会发生故障。下面列出了一些可能性。

您的64位系统在前4GB内存中分配视频内存。因此,如果您的视频卡具有大量内存,则该内存将丢失,如下所述:
可用内存可能少于基于Windows 7的计算机上已安装的内存

您可以通过打开设备管理器并在“查看”菜单下选择“连接资源”来检查计算机上的内存使用情况。展开“内存”节点,看看是否可以找出正在占用什么内存。在某些情况下,可以通过禁用未使用的设备(例如火线)来增加内存。

您还可以尝试执行与本文中所述完全相反的操作:
增加Windows 7中的文件系统内存缓存大小

您也可以尝试禁用Windows 7 SuperFetch

如果没有帮助,则将“任务管理器”选项卡的屏幕截图发布为“性能”会很有用。


+1用于“禁用超级获取”。

级别不低,但是Superfetch很有可能会提高其性能,而不是降低性能,因为构建可执行文件通常会频繁执行,并且会从缓存中受益。至于影响可用内存的视频卡,它不适用于仅4Gb的Windows 7 64位。在这种情况下,视频卡将映射到4Gb以上。
tgiphil 2011年

@tgiphil:来自上面引用的Microsoft文章:“具有256 MB板载内存的视频卡,该内存必须映射在地址空间的前4 GB内”。
harrymc

在我的组织中,RAM中还有大量的小文件和巨大的NTFS图元文件。据我所知,Windows不会像其他所有内容一样缓存图元文件,并且从不真正从RAM中释放它。计算机将使用高达100%的内存,然后由于内存不足,所有应用程序开始崩溃。当然,这不是Windows 7,而是Windows Server 2008 R2。
菲尔(Phil)

另外,“增加文件系统内存高速缓存”链接会建议实际上不起作用的内容。参见tweakhound.com/blog/?p=1164
Phil

0

Windows Server 2008 R2遇到完全相同的图元文件“缓存”问题,活动内存中保留了过多的图元文件信息,因此缓存功能没有权限在存在内存压力时允许释放此内存。

我已经在serverfault.com页面Windows Server 2008 R2图元文件RAM的使用情况下编写了Powershell脚本,该脚本将最大图元文件活动内存设置为合理的水平。其余的移动到备用内存,然后正常的缓存功能便能够适当地优先处理事情。Windows 7 x64和Server 2008 R2 x64都具有默认的1TB图元文件数据最大活动内存限制。是TB,不是GB。

现在,Work会在组织站点备份的服务器上所有站点上运行该脚本,该站点每天在备份周期中处理数百万个文件。这些备份服务器还运行内存密集型Java程序(VMware vSphere),2个SQL服务器以及带有自己的SQL服务器的WSUS。使用备份软件首先读取元数据(名称,大小,修改日期,权限,属性等),以确定将要备份的文件列表,然后非常非常快地填满了元文件缓存。即使完成所有这些操作,它们也只需4GB的内存就可以顺畅运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.