我最近注意到,我机器上的 Windows 7 一直在抱怨内存不足,我应该关闭一些程序。它通常会指出我正在运行的程序确实存在内存泄漏,并且已经变得相当大。但是,这些程序通常从 20MB 的 RAM 使用量开始,并且只有在运行程序 12 到 24 小时后,它们的 RAM 使用量才会增长到最多 200MB。我从未同时运行过三个以上的程序,所以我正在运行的程序的最大 RAM 使用量为 600MB。
我在一台具有 4GB RAM 的机器上运行 Windows 7 x64。起初我实际上忘记了这一点,并且当 Windows 抱怨时只会重新启动程序,但是现在我想起来了,Windows 抱怨我使用了 600MB RAM(即使包括操作系统本身使用的内存也低于 2GB)这一事实似乎很奇怪。因此我打开系统进程窗口来查看列出的进程和系统进程的总内存使用情况。加起来刚好超过 700MB,所以我还是很困惑。然后我转到资源监视器并打开“内存”选项卡。我认为我在那里找到了答案。它指出我实际上只使用了 33% 的 RAM。但是,在物理内存资源分配栏上,已修改部分最多为 2.3GB,待机部分最多为 540MB,可用部分低于 20MB,缓存内存为 2.8GB,可用内存为 550MB。 (当然,这些值稍微四舍五入了,因为在我写这篇文章时,它们在不断变化。)
因此,显然 Windows 7 使用的内存比我多。过去,我确实对已安装的 Windows 服务菜单进行了一些修改,但那只是禁用某些托管服务(因为我不想进行任何媒体共享)、启用 Telnet 客户端并删除 Internet Explorer,但这可能是我的错。有没有办法让 Windows 不这样做,或者至少缓存得少一些,这样我就不会再收到这些“内存不足”通知?
答案1
备用内存不是问题,它被视为“空闲”内存,并将根据请求重新分配 - 它只包含程序最近使用的内存,但现在已释放。如果另一个程序请求的内存多于“空闲”内存,系统应无缝地从备用内存集中分配内存(因为“备用”内存目前并未真正使用)。
您的 Modified 内存过多是您的问题,因为它无法轻易重新分配。请参阅这里。这可能是由于内存泄漏(这似乎与您的第一段相对应 - 哪些程序正在泄漏?)或页面文件太小(您的页面文件是固定大小还是已停用?)引起的。
答案2
SuperFetch 抢先缓存不是您的问题。Windows 7 将使用尽可能多的空闲内存来抢先缓存它认为您接下来需要的内容。如果一切顺利,它将为您节省一些时间,并且您的应用程序看起来会更快、响应更快。
如果它猜错了,而你需要一些其他数据,Superfetch 将释放部分内存,以便你加载真正需要的数据。请参阅:http://arstechnica.com/microsoft/news/2010/02/behind-the-windows-7-memory-usage-scaremongering.ars
如果您遇到“内存不足”问题,那不是 SuperFetch 造成的,因为如果应用程序需要,它会释放尽可能多的内存。您的可用内存(550MB)就是 superfetch 使用的,所以显然您还没有用完内存。即使您用完了所有 RAM,您的机器也会重新使用虚拟内存,不过您会希望避免这种情况,因为这样会影响性能……
所以这表明你的“内存不足”问题是由于其他地方的问题造成的 - 也许你的一个泄漏应用程序正在消耗(而不是放弃)其他类型的资源......
无论哪种方式,通过解决有缺陷的应用程序更有可能找到解决方案,而不是摆弄 SuperFetch...
答案3
由于您认为该问题不是由内存泄漏的程序引起的,因此另一种方法是增加页面文件大小。
虽然页面文件不是主内存,但它将允许操作系统将更多数据交换到硬盘驱动器,并有望停止“内存不足”消息。唯一的其他选择是删除与占用 13GB 内存的进程相关的程序,但我不知道什么程序需要分页那么多内存,除非它是一些高端 PC 游戏或 3D 渲染软件。
答案4
解决这个问题
转到开始-运行-msconfig,然后转到服务并从“Windows 驱动程序基础”中删除勾选。单击确定并重新启动机器。
请记住 - 只有上述步骤才能解决此问题。如果您已从 services.msc 禁用,则它在启动操作系统时仍处于活动状态,并且会阻塞您的内存。
要验证这一点,请使用工具