SOLUTION: There’s a lot of stuff to read in this thread,so i’ll just summarize here to help.
The problem is the VMWare ESX balloon driver which “inflates” the amount of memory “in use” that the OS sees in order to force the OS to dump caches and reduce working set size. This creates a large amount of “in use” physical ram that you can’t account for by looking at the processes. You can look at the VMWare console performance graph for the VM’s and see the balloon driver in use.
The solution to the performance was to raise the amount of reserved memory for the server,which limits the amount of memory the balloon driver can steal from you.
我有一个32位Windows 2003终端服务器运行sql Server的本地副本(完整版,而不是快速版),并为几个开发人员托管Visual Studio 2008开发环境.这些机器是在vSphere 4上运行的虚拟机,分配了4GB内存.
当我有2或3个用户登录时,它使用超过4GB的已提交内存,但我似乎无法找到大部分内存被使用的位置.当我在任务管理器中为所有用户添加所有内存时,它最多只占2GB左右.剩下的就是用什么?
我试过循环sql服务器,只占用我看到分配给sql服务器的内存.对于visual studio也是如此,如果我关闭它,它只需要在任务管理器中分配的数量超出提交的内存池.我还为sql Server设置了内存选项,最多只能使用512MB.
我不相信这是系统或文件缓存问题,因为Windows在提交的统计信息AFAIK中不包含该内存.
这让我疯了.根据他们似乎使用的金额,应该有足够的内存用于所有这些事情.如何找到使用此额外内存的位置?
更新
关于我正在查看哪些内存统计信息,它们都没有加起来.
例如,现在有1个用户登录并且只在后台运行Visual Studio和WebDev服务器,以及sql Server和IIS ..我添加了专用字节,我获得了大约1049740K的内存,但是任务管理器说提交费用是1146M,大约150Mb下落不明.
当3个用户登录时,它只有大约2GB的私有字节(由于用户只是运行Visual Studio,因此共享了大量内存).
VM Size也没有加起来,因为它通常与私有字节没有多大差别.虽然奇怪的是,虚拟内存的Process Explorer中的数量与在任务管理器中的数量非常不同. PE显示sql Server的虚拟内存为1,791,444K(对于sql Server)和1,251,432K(对于Visual Studio),但是对于该机器,提交费用总计仅为1146M.
在任务管理器中没有WS Size的列,但是在PE中它将WS列为Private和Sharable,并且这些数字明显少于Commit charge,甚至加起来.
更新:
我知道这个问题有很多细节,所以问题可能不清楚.
如何查找哪些进程正在使用系统中所有已提交的内存? TaskManager和Process Explorer给出的内存不能正确加起来,即使提交了4GB,也只显示大约2GB的已提交内存.