我在 2008 R2 服务器上使用 SQL、TFS 和一些其他工具拥有以下进程列表和内存消耗(通过进程资源管理器报告):
如您所见,系统消耗了 3.6 Gb,但进程列表仅显示一个大进程(第一个 [SQL Server])占用不到 500 Mb,其他进程都很小,所以我不知道是谁占用了几乎所有的服务器内存。有什么办法可以找出罪魁祸首吗?
答案1
操作系统不在乎,你也不应该在乎。操作系统没有内存压力,它有 500MB 可用空间。所以它不关心内存的使用情况根本。
它唯一能做的就是投入 CPU 来回收内存。但随后会发生以下两种情况之一:
无论如何,这些内存都不会被使用。这将使释放这些内存的努力完全白费。这是最可能的结果,因为 500MB 已经闲置了。拥有更多可用内存将不无论如何都会对性能产生影响。
该内存将被使用。在这种情况下,释放它的努力将再次完全浪费,因为它必须被撤销。
现代操作系统只有在别无选择的情况下才会释放内存。这是它们对内存所能做的最糟糕的事情,因为它要求它们做额外的工作才能利用这些内存。它们可以更轻松地将内存直接从一种用途转换为另一种用途,而无需增加释放内存的浪费中间步骤。
它只是在做它上次正在做的事情。操作系统无需回收它,因为最有可能的下一次使用就是它之前正在做的事情,而且它已经在那里了——免费。
话虽如此,内存地图会告诉你。但在没有内存压力的机器上分析操作系统内存使用情况是毫无意义的。