Windows Server任务pipe理器显示比所有进程的工作集大小之和高得多的内存使用量

我有一台主要运行SQL Server 2008的16 GB Windows Server 2008 x64计算机。在任务pipe理器中看到的可用内存非常低(目前为128 MB),即大约使用15.7 GB。 到现在为止还挺好。

现在,当我尝试使用大多数内存来缩小进程的范围时,我感到困惑:没有一个进程的任务pipe理器的“进程”选项卡中显示的工作集大小超过了200MB。 那么,也许工作集大小不是相关的计数器?

为了解决这个问题,我使用了一个PowerShell命令[1]来总结过程对象的每个单独的属性,采用暴力方法 – 当然,其中一个必须加起来为15.7 GB,对吧? 结果都没有,最接近的是VirtualMemorySize(大约12.7 GB)和PeakVirtualMemorySize(大约14.7 GB)。 WTF?

换句话说:许多与内存相关的进程信息中的哪一个是“正确的”,即在任务pipe理器的“性能”选项卡中显示的服务器的物理内存?

谢谢你们!

[1] $ erroractionpreference =“默默继续”; get-process | gm | where-object {$ .membertype -eq“Property”} | foreach-object {$ .name; (get-process | measure-object -sum $ _。name).sum / 1MB}

增加所有进程的内存使用量通常不会产生有意义的结果。 这将留下两个主要的内存用户,即系统caching和备用列表。 您不能通过简单地添加数字列表来解释内存使用情况。 内存pipe理系统太复杂了。

添加工作集还会跨进程共享多个计数页面,如系统DLL和可执行文件中的代码不止一次地启动。

SQL-Server在64位AWE上用于locking内存页面,并且数量不计入任务pipe理器“工作集”中。