Windows Server 2008 R2 64位内存泄漏

Windows Server 2008 R2 64位内存泄漏

我的一台办公室服务器出了问题。它是一台虚拟化的 Windows 2008 R2 服务器,内存为 6GB。它只有 Microsoft SQL Server(分配的最大内存 = 3GB),以及一个占用内存不超过 1GB 的软件。但是,服务器的内存几乎已满,查看任务管理器中的进程,它们似乎无法对此进行总结。我安装了 RamMap,但无法轻松解释它,您能识别出任何“高值”吗?

在此处输入图片描述

答案1

好吧,我看到约 3.2 GB 的驱动程序锁定内存,这立即引起了怀疑。

这种内存,即驱动程序锁定内存,是已被内核模式驱动程序锁定的内存。通常用于传输小的数据量,通常用于短的时间段。

所以如果你有一个大的一块驱动程序锁定的内存,长的时间,这通常表明某些事情不对劲。

我在这里大胆猜测一下,既然您提到这是一台虚拟化服务器,那么 VMware balloon 驱动程序就是这么做的。我没有足够的数据来告诉您为什么会这样,但有很多案例和 VMware 支持知识库,像这个,具体讨论了气球驱动程序错误地保留了大量不应该保留的内存。

您还必须考虑到气球驱动程序按照设计运行的可能性,它试图让您的服务器分页内存,因为它迫切需要将内存提供给同一主机上的另一个虚拟机。

还有一种可能性是,它根本不是一个虚拟机管理程序动态内存驱动程序,而只是一些流氓设备驱动程序。

驱动程序通常分配带有 3 或 4 个字符标签的“标记”内存,该标签提示负责进行分配的驱动程序。poolmon.exe(
Windows SDK/DDK 的一部分)可以帮助进行诊断。

就像我说的,这只是猜测,但这是我能利用我掌握的数据做出的最好的决定。

答案2

好吧,我拥有所有可以想象到的 SQL Server 版本,从 2005 年到 2016 年,我还没有看到任何内存泄漏达到实际使用内存的 100%。看看你是否有已启用虚拟机的动态内存

Driver Locked是您应该关注的数字。在您的特定情况下,Driver Locked可能是 Hyper-V 驱动程序之一,它锁定了所有未使用的内存(分配给 VM,但目前未被 VM 使用),因此它可以“将其提供给”配置了动态内存的其他 VM,甚至主机操作系统,无论哪个当前需要它。您可以通过在该虚拟机内打开一些大文件或内存密集型应用程序来测试它 - 随着其他指标的增加,DriverLocked 内存应该会下降。恕我直言如果您没有在所有虚拟机上过度配置过多的内存,那么这不应该成为问题的原因。

相关内容