我有一台安装了 16GB RAM 的 Windows Server 2008 R2 64 位 SP1 计算机。如果我打开任务管理器,它会告诉我几乎所有内存都已满——但事实并非如此。
总数是正确的,但缓存、可用和空闲总数似乎没有反映服务器上实际可用的 RAM 量。这可能是什么原因造成的?
更新 根据@evan-anderson的建议,我们加载了RAMMap。它报告说“Metafile”占用了大量内存。
找一个邮政这解释了通过 RAMMap 进行修复的原因。我这样做了,似乎正在慢慢释放内存。但是,每隔几天就必须这样做似乎有问题。
还发现了服务器故障问题关于这个问题,我正在考虑@BeowulfNode42 的解决方案
答案1
“缓存”、“可用”和“免费”的总数永远不会等于“总数”。以下是很好的博客文章,详细描述了这些数字。
任务管理器是告诉您 88% 的物理 RAM 已被占用。您有某个进程(或多个进程的组合)分配了大量内存。
答案2
如果您无法追踪哪个进程正在使用内存膨胀,那么我猜想该服务器可能正在 Hyper-V 或 VMware ESXi(或 KVM 或 Xen)中运行,并且正在发生内存膨胀。在 Hyper-V 中,这称为动态内存。在其他产品中,这称为内存膨胀。
膨胀期间发生的情况是,当物理主机内存不足而其他客户机需要内存时,主机将在未充分利用的主机上“膨胀”膨胀驱动程序,这会导致膨胀驱动程序似乎在消耗内存。这样做是为了确保它可以安全地将该块物理 RAM 重新分配给另一个客户机。检查主机资源利用率和动态内存选项。如果您的 RAM 已过度使用,这几乎肯定是正在发生的事情。