确定 Windows Server 2008 中所有内存的使用情况

确定 Windows Server 2008 中所有内存的使用情况

我有一个 Windows Server 2008 系统,它有 12GB 的 RAM。

如果我在任务管理器中列出所有进程,并计算每个进程的内存(工作集、内存(私有工作集)、提交大小等),我永远不会超过4-5GB应该处于“正在使用”状态。但是,任务管理器报告此服务器已11GB通过“性能”选项卡使用。

我无法确定所有已使用的 RAM 都去了哪里。似乎不是系统缓存,但我不能确定。

可能是某个设备内存泄漏,但我很难找出是哪个设备。服务器内存不断增加,最终迫使我们重新启动设备以清除内存。

我一直在阅读有关Windows Server上RAM分配工作原理的信息:

但我担心我目前陷入困境而没有任何想法。

答案1

Windows 内存管理是一个庞大的话题。仅就这个话题就可以写出一整本书。我要做的第一件事就是观看 MSDN Channel 9 上的视频系列“揭秘 Windows 内存管理”第 1 部分和第 2 部分:

http://channel9.msdn.com/Events/TechEd/Europe/2010/WCL401

http://channel9.msdn.com/Events/TechEd/Europe/2010/WCL402

(该会议有北美和欧洲版本,因为他在美国的 TechEd 和欧洲的 TechEd 上都发表了这些演讲。)

任务管理器和资源监视器还可以,对于 99% 的 Windows 用户来说已经足够了,但是对于我们这些最后 1% 并且希望看到尽可能详细内容的用户来说,Sysinternals 工具确实非常出色。

从 RAMMap 开始。你可以在 \\live.sysinternals.com\Tools\ 上获取它。然后,为了更好地放大查看特定进程如何使用内存,请使用 VMMap。

现在我们先不要试图定义所有这些不同类型的内存的含义。你的问题是你担心内存泄漏。你的症状是你的服务器因内存不足而无法使用,你被迫重新启动它。

您永远不需要定期重新启动服务器,只需从正常运行开始。理想情况下,它应该是一个自我维护的系统,只需要从修补和配置更改中重新启动。所以是的,我会说你可能有问题,假设你重新启动服务器是有充分理由的,比如它实际上变得不稳定/不可用。不仅仅是因为任务管理器告诉你几乎所有的 RAM 都在使用中。现代版本的 Windows 会积极地缓存东西并将文件和数据映射到 RAM 中,即使您当时没有使用它们。请注意任务管理器中“空闲”内存和“可用”内存之间的区别。

不过,我不确定你的意思“可能是某个设备出现了内存泄漏。”您说的设备是什么意思?我以为我们这里讨论的是 Windows 服务器?

您可能在几种不同类型的内存中都存在内存泄漏,例如进程的私有内存、共享内存,甚至可能是池内存(分页或非分页)。在任何一种情况下,请使用我提到的工具并观察这些不同的内存类别,以查找内存使用量不断上升且永不下降的进程。这将是泄漏。

希望这可以帮助。

答案2

默认情况下,任务管理器从不显示每个进程的实际、完整内存使用情况;但您可以让它显示更准确的其他信息。

看这里:

http://windows.microsoft.com/en-US/windows7/What-do-the-Task-Manager-memory-columns-mean

相关内容