我有一个安装了 8GB RAM 的 Windows 2008 x64 服务器。
任务管理器和资源监视器都坚持使用 7.5GB 的 RAM。但是,Processes (Memory Private Bytes) 下的内存列表没有加起来。我确实检查了所有用户的显示进程并手动添加了我想出的大约 3.5GB RAM 的数字。
我还查看了 SysInternals Process Explorer 的最新副本。而且,私有字节或工作集加起来都不会超过大约 3.5GB 的正在使用的 RAM。
这是怎么回事?
=====
更新:我反弹了服务器,看看内存利用率会发生什么。启动和常规操作开始后,它的 RAM 使用量为 3GB。18 小时后,它恢复到 6.8GB 的使用量,但没有任何迹象表明额外的 3.5GB 左右的 RAM 被用于何处。
以下是资源监视器和任务管理器屏幕截图的链接:
更新 2:好吧,我相信我找到了问题所在。当我从我的 sql 服务器中分离出一个较大的数据库时,显示为“正在使用”的 ram 数量急剧下降。内存专用字节数几乎没有变化。所以我猜测 SQL 服务器有某种分配内存的方式,它并没有真正出现在任何监视器中。
我更进一步,创建了一个新的数据库文件,然后从我分离的那个中传输了所有数据。即使它有相同的数据,也有相同的事务通过它,使用中的内存仍然很低。也许数据库中有一些损坏?我会把它留给数据库之神,然后去寻找另一个“问题”;)
我今天发现这篇文章详细讨论了锁定页面、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_page_allocations_kb 字段,它将告诉您在这些页面中分配了多少RAM sql server。任务管理器在 CPU 条/图下方有一个内存条/图。这是应用程序使用的数量。
该图表指示的数量与指示为“可用”的数量之和应等于您的 8GB 总量。
“可用”不仅仅是“免费”,因为“缓存”包含在“可用”中。
我有一个类似的问题。看到这篇技术网文章 - 907877。尝试使用 SQL 命令 DBCC MEMORYSTATUS 并检查 AWE 分配的条目是否等于您丢失的内存。
您很可能与您的视频卡共享 RAM。检查您的 BIOS 设置。那就没有头绪了。这里的一些建议是测试内存模块。
您正在运行哪些应用程序?可能是您正在运行有内存泄漏的开发应用程序或第三方软件包?