解决方案:这个帖子里有很多东西需要阅读,所以我只在这里总结一下以提供帮助。
问题在于 VMWare ESX 气球驱动程序,它“膨胀”了操作系统看到的“正在使用”的内存量,以强制操作系统转储缓存并减少工作集大小。这会产生大量“正在使用”的物理内存,而您无法通过查看进程来解释这些内存。您可以查看 VM 的 VMWare 控制台性能图,并查看正在使用的气球驱动程序。
解决性能问题的方法是增加服务器的保留内存量,从而限制气球驱动程序可以从您那里窃取的内存量。
我有一台 32 位 Windows 2003 终端服务器,它运行 SQL Server 的本地副本(完整版,非 Express 版),并为几位开发人员托管 Visual Studio 2008 开发环境。这些机器是运行在 vSphere 4 上的虚拟机,为其分配了 4GB 内存。
当我有 2 或 3 个用户登录时,它使用了超过 4GB 的已提交内存,但我似乎找不到大部分内存被用在了哪里。当我在任务管理器中将所有用户的所有内存加起来时,它最多只占 2GB 左右。剩下的内存被什么占用了?
我尝试过循环 SQL 服务器,这只会占用我看到分配给 SQL 服务器的内存。Visual Studio 也是如此,如果我关闭它,它只会从已提交的内存池中占用我在任务管理器中看到的分配量。我还将 SQL Server 的内存选项设置为最多仅使用 512MB。
我不认为这是一个系统或文件缓存问题,因为据我所知,Windows 没有将该内存包含在已提交的统计信息中。
这让我很抓狂。根据它们似乎使用的内存量来看,内存应该足够用于所有这些设备。我如何找到这些额外内存的使用位置?
更新
就我正在查看的内存统计数据而言,它们都不符合要求。
例如,现在有 1 个用户登录并且只运行 Visual Studio 和 WebDev 服务器,以及在后台运行 SQL Server 和 IIS。我添加了专用字节,得到大约 1049740K 的内存,但是任务管理器说提交费用是 1146M,剩下大约 150Mb 未被利用。
当有 3 个用户登录时,只有大约 2GB 的私有字节(由于用户只是运行 Visual Studio,因此共享了大量内存)。
VM 大小也加不上去,因为这通常与专用字节数相差不大。不过,奇怪的是,Process Explorer 中的虚拟内存数字与任务管理器中的数字相差很大。PE 显示 SQL Server 的虚拟内存为 1,791,444K(SQL Server)和 1,251,432K(Visual Studio),但机器的提交费用总计仅为 1146M。
任务管理器中没有 WS 大小的列,但在 PE 中,它将 WS 列为私有和可共享,并且这些数字即使加起来也明显小于提交费用。
更新:
我知道这个问题有很多细节,所以也许问题不清楚。
如何找到哪些进程正在使用系统中所有已提交的内存? TaskManager 和 Process Explorer 提供的内存加起来不正确,即使已提交 4GB,也只显示约 2GB 的已提交内存。
答案1
sql server 和 vmware tools 在虚拟机中争夺内存空间。这可能因运行终端服务和 vs 而加剧。
如果您还没有这样做,请进入虚拟机的设置并在资源选项卡下创建一个完整的 4Gb 内存预留。这将阻止气球驱动程序尝试回收虚拟机内的内存。
您可能还想配置 SQL Server 中的选项,以确保它仅分配部分系统内存。可能最多 2GB。
答案2
可能是 SQL Server。默认情况下(如果我没记错的话),SQL Server 将分配尽可能多的内存,除非专门配置为消耗特定数量的内存(在 SQL Server 属性中访问)。分配的内存不会显示在任务管理器中。您需要做的是启动 perfmon 并添加“SQL Server:内存管理器:目标服务器内存”和“SQL Server:内存管理器:总服务器内存”计数器,然后查看 SQL Server 愿意消耗多少内存以及它实际消耗了多少内存。
答案3
你是认真的?
我有一个 32 位 Windows 2003 终端服务器,它运行 SQL Server 的本地副本(完整版,不是 Express),并为几个开发人员托管 Visual Studio 2008 开发环境
正如信息:
我的虚拟工作环境是一个 4g 内存的 Windows 7 系统,带有 Visual Studio 和 SQL Server。64 位。我经常用掉其中的 3.5 gb。仅我的 Visual Studio 实例就经常占用大约 500mb,而且调试需要很多东西,尽管可能不会持续很长时间。此外还有常见的罪魁祸首(帮助系统、浏览器)......
...你的起始配置太低了。你提到的机器可能适合一名开发人员使用。如果不是很多的话,则适合两名开发人员使用。
剩下的用来做什么?
系统使用量很大。别忘了,所有屏幕都必须渲染,而显卡在这里毫无用处 - 因此必须复制所有内存缓冲区(这可能很多 - 我们在这里讨论的分辨率是多少,有多少个屏幕?鉴于 2003 年,我假设每个开发人员一个)
暗示:
升级到:
- 2008 R2。更好的 RDP,包括多显示器设置。我目前远程使用 2 个屏幕,2008 R2 从我的 Windows 7 客户端复制我的显示器设置。使用起来非常好。对我来说,这个更新确实使远程工作变得可用 - 我已经习惯使用 2 个以上的屏幕工作多年了,远程总是很痛苦。
- 64 位操作系统。32 位不是。即使所有软件都是 32 位(VISual Studio 等),64 位主机也可以拥有更多内存,实际上会为每个启动的进程分配 3GB。而且还有很多正在运行的进程。
而且你需要更多的内存。我认为每个开发人员 2GB 是一个相当不错的配置(假设有 2 名以上的开发人员)。你可能只需要更少的内存,但可能性不大。这取决于他们实际做什么 - 但 Visual Studio 中的大型应用程序会占用大量内存。特别是在编译期间,