Windows Server 2008 上缺少内存

Windows Server 2008 上缺少内存

我有一台安装了 8GB RAM 的 Windows 2008 x64 服务器。

任务管理器和资源监视器都坚持认为已使用了 7.5GB 的 RAM。但是,“进程(内存专用字节)”下的内存列表不合逻辑。我确实检查了“显示所有用户的进程”,并手动添加了数字,得出的结果是大约 3.5GB 的 RAM。

我还查看了 SysInternals Process Explorer 的最新版本。无论是 Private Bytes 还是 Working Set,占用的 RAM 总量都不超过 3.5GB。

这是怎么回事?

=====

更新:我重启了服务器,看看内存利用率会发生什么变化。启动并开始常规操作后,内存使用量为 3GB。18 小时后,内存使用量又回到了 6.8GB,但没有任何迹象表明额外的 3.5GB 左右的内存被用在了哪里。

以下是资源监视器和任务管理器的屏幕截图链接:

资源监控

任务管理器

更新 2:好吧,我相信我找到了问题所在。当我从我的 SQL Server 中分离一个较大的数据库时,显示为“正在使用”的 RAM 数量急剧下降。内存专用字节数几乎没有变化。所以我猜 SQL Server 有某种分配内存的方法,它实际上不会显示在任何监视器中。

我进一步创建了一个新的数据库文件,然后从分离的文件中传输了所有数据。尽管它有相同的数据,并且有相同的事务通过它,但使用的内存仍然很低。也许数据库中有一些损坏?我会把它留给数据库之神,然后去寻找另一个“问题” ;)

答案1

今天我发现了这篇文章,其中详细讨论了锁定页面、AWE 和 64 位系统。 http://blogs.msdn.com/psssql/archive/2009/09/11/fun-with-locked-pages-awe-task-manager-and-the-working-set.aspx

其中一个要点(#3)是标题“为什么任务管理器没有显示分配给 SQL Server 的所有内存”

这是非常好的解释。最终,这没有显示的原因是 SQL Server 已将这些页面“锁定”在内存中。锁定的页面不是工作集的一部分,因此它们不会出现在任务管理器中,甚至不会作为应用程序内存集的一部分出现。

如果您运行,select * from sys.dm_os_process_memory您可以看到locked_pa​​ge_allocations_kb字段,它将告诉您sql服务器在这些页面中分配了多少RAM。

答案2

任务管理器在 CPU 条/图下方有一个内存条/图。这是应用程序使用的内存量。

该图表所示数量与“可用”所示数量之和应等于您的总计 8GB。

“可用”大于“免费”,因为“可用”中包含“缓存”。

答案3

我遇到了类似的问题。看到了这篇技术文章 - 907877。尝试使用 SQL 命令 DBCC MEMORYSTATUS 并检查 AWE 分配的条目是否等于您丢失的内存。

答案4

您正在运行什么应用程序?可能是您正在运行存在内存泄漏的开发应用程序或第三方软件包?

相关内容