为什么Windows Task Manager报告的总内存使用量比所有进程的内存使用量总和高得多?[重复]


98

任务管理器显示我的总内存使用量是我6 GB内存总量的90%,但是没有一个进程使用的内存超过250 MB,并且所有正在运行的进程的RAM使用总和小于2 GB。我试过了:

  • 查看Windows 8任务管理器“进程”选项卡上“内存”列中的数字。
  • 查看任务管理器“详细信息”选项卡上的“工作集”,“私有工作集”,“共享工作集”和“提交大小”列。
  • 在Process Explorer中查看与内存相关的相似列。
  • 我曾尝试运行Sysinternals RAMMap,但是当我遇到内存不足的危机时,它在启动时崩溃。解决问题后,RAMMap即可正常运行,但那时为时已晚。

全部显示正在使用的内存量很小。

互联网上有很多人问这个问题的变体,以及各种版本的Windows。他们中的一些人经常通过重新安装软件来解决低内存问题。有时是从头开始重新安装Windows。我正在寻找这些都共有的一般性问题的答案,而这些问题似乎从未在其他地方得到解答:

  1. 为什么不管我如何计算它们,总使用的内存都比所有列出的进程使用的内存高得多?
  2. Windows如何在不知道正在使用什么程序的情况下“知道”内存的使用情况?
  3. 哪些进程可能会耗尽内存,但不会显示在列表中?
  4. 是否有任何软件可以提供有关已用内存的更多信息?

特定于我自己的问题的详细信息:自升级到Windows 8.1以来,该问题在我登录后立即发生。运行任何程序后,内存就会耗尽。我在Process Explorer中注意到,iexplore.exe的多个实例正在运行,显然是自动启动的。一个特定实例仅使用了几MB的RAM,但显示了数亿页的错误。我一时兴起,杀死了那个特定的进程,内存使用率立即下降了70%。

导致一个具体问题:

  • 如何杀死一个仅用几个MB的进程释放几个GB?

还有一个(大概很难的)奖金问题:

  • 如果没有重新安装Windows,如何避免每次重新启动计算机时都必须经历此过程?

3
内核内存也计入使用率。RAMMAP的帖子图片:blogs.technet.com/b/askperf/archive/2010/08/13/...
magicandre1981

2
我认为该问题的标题应为“为什么我的内存不足”。
surfasb 2014年

没有细节,这个问题是不可能回答的。列出已安装的程序。或者更好的是,从Performance Monitor中转储正在运行的进程。
surfasb 2014年

1
您实际上是要完全关闭/重新启动计算机,还是使用混合关机(Windows 8中的默认设置)?切换到Windows 8后,我遇到了类似的问题。我假设有一个驱动程序占用了我越来越多的物理RAM,即使将计算机关闭后再打开也没有将其归还。在几周内,它积累了几千兆字节。因此,现在每隔几天我单击“重新启动”或按住shift键,同时单击“关闭”以实际上关闭PC。
罗伯特

2
在我的情况下,这是“驱动程序锁定”内存,由于启用了“动态内存”,因此由Hyper-V保留。我必须停止所有VM,禁用设置,然后重新启动它们。感谢您对RAMMap的建议。
Dagelf

Answers:


7

顺便说一句,您应该尝试不使用术语“内存”。它造成了很多混乱。如果您指的是物理内存,请说“物理内存”或“ RAM”。如果您的意思是虚拟内存,请这样说。如果您是指后备商店,那就这样说。

为什么不管我如何计算它们,总使用的内存都比所有列出的进程使用的内存高得多?

因为除非没有选择,否则操作系统不会浪费物理内存(RAM)。

Windows如何在不知道正在使用什么程序的情况下“知道”内存的使用情况?

因为没有程序在使用它。例如,考虑包含刚刚终止的程序代码的内存。没有程序在使用它。但是使用了该内存,因为它不是空闲的,并且包含可能有用的数据(以防程序再次运行)。

哪些进程可能会耗尽内存,但现在显示在列表中?

进程不使用它。

是否有任何软件可以提供有关已用内存的更多信息?

RAMMap可以做到这一点。

只有两种可能性,可以使用RAM或将其浪费掉。显然,第一个更好。任何可用内存都将永远浪费-4GB的计算机今天不能使用2GB以便明天使用6GB。如果您正在考虑“我现在希望免费使用它,以便以后使用”,那就算了。现在,您可以使用它,并在以后使用它。

如何杀死一个仅用几个MB的进程释放几个GB?

您的后备存储空间不足,而不是物理内存不足。您有足够的可用物理内存,但没有足够的后备存储空间供OS继续分配可能需要后备的虚拟内存。

该过程仅使用了几MB的物理内存,但是OS可能不得不为其保留几GB的备份虚拟内存。例如,假设一个进程创建了一个2GB文件的可写私有内存映射。操作系统必须为该进程保留2GB的备份虚拟内存,因为它可能会写入该映射的每个字节。同样,它可能永远不会写入任何一个。这就是为什么您需要一个大小合适的分页文件的原因。

现代操作系统会写很多支票(有前途的后备存储),这些支票永远不会兑现(需要RAM)。即使您已经写了一大堆可能会兑现或可能无法兑现的大额支票(承诺作为后备存储库如您所愿)。分页文件添加了后备存储,允许操作系统继续写入检查。


14
PS:我使用“内存”一词不是因为我不知道RAM和VM之间的区别,而是因为我的计算机只是告诉我它不在“内存”之内,而没有提供任何有关其实际信息的信息。手段。(出于我在上一条评论中指定的原因,我认为它表示RAM,但我不确定。)我希望您使用真正的vocab(如有必要,可以查看)而不是详细的财务隐喻:)
Josh 2014年

91
-1是因为在阅读了答案和所有注释之后,仍然不清楚为什么总使用的内存比所有列出的进程使用的内存高得多。
Bennett McElwee 2014年

6
即使没有程序在使用内存,该术语也被“使用”,这与诸如“已使用”和“免费”之类的单词的正常含义完全不同-也许这是Microsoft的术语,而不是您的术语。无论如何,例如,假设正在运行的程序当前使用50%的RAM,而正在运行的程序未使用25%的RAM,但是包含将来可能有用但也可以丢弃的数据。将它们加在一起并显示“ Memory:75%”不会向用户传达任何有用的信息。我认为这就是普遍的混乱之源。
Bennett McElwee 2014年

2
@BennettMcElwee没有将内存使用减少到一个简单数字的好方法,但是用户坚持使用它。这使开发人员处于不舒服的位置-他们可以提供的数字不一定总是有用或没有数字。大多数OS和GUI开发人员选择第一个选项-他们提供的数字会引起很多混乱。如果您的问题是“是否需要更多的RAM使我的系统更好地工作”,答案是-很难说,即使对于专家也是如此。
大卫·史瓦兹

2
@DavidSchwartz您的答案并不能说明这一点,它只是说明了这一点。您可以提供任何链接来支持该特定声明吗?我将“物理内存XX%”解释为当前正在使用的XX%物理安装的RAM,而其他进程无法使用。我相信以下事实可以验证我的观点:超过90%的系统倾向于锁定,并且当应用程序尝试分配超过100%的内存时,它们将完全崩溃。以我的经验,这不是大多数系统运行的标准机制。
约翰·诺伊豪斯
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.