为什么内存使用率为 80% 而不是 100% 时似乎内存不足

为什么内存使用率为 80% 而不是 100% 时似乎内存不足

根据资源监视器,Windows 和 Linux 机器上的内存使用率似乎最高达到 80% 左右。一旦内存达到 80% 左右,磁盘 IO 就开始激增,我可以听到计算机的抖动声,大概是由于虚拟内存使用量过大造成的。

直观上看,只有在机器的内存使用率接近 100% 时才会发生磁盘抖动,但是出于某种原因,这两个操作系统似乎都将 80% 视为可分配的最大内存,并且无论由于内存不足而发生多少磁盘抖动,似乎都不会超过该值。

为什么另外 20% 的内存似乎被保留或未使用?

答案1

我将主要谈论 Windows,因为这是我所了解的。但 Linux 的基本原理是相似的。

Windows 和 Linux 都具有先进的内存管理功能,但其原理却不易理解。操作系统的设计初衷是运行良好,但并不一定直观。

重要的是要明白,如果内存使用率显示为 80%,并不意味着剩余的 20% 是空闲的和未使用的。在大多数情况下,它被大量使用。在我的 Windows 10 系统中,内存使用率目前为 8 GB 的 40%。剩余的 60% 标记为“可用”,但其中只有 44 BM 实际上是空闲的。大多数可用内存都在待机列表中。此内存包含潜在有用的数据,但当前未处于活动状态。如果需要,可以将此数据返回给拥有它的进程。或者可以根据需要将内存重新分配用于任何其他用途。这种内存对良好的性能贡献很大。

Windows 和 Linux 始终会尝试将可用内存(但不一定是空闲内存)保持在合理的值。这是一个复杂的过程,需要考虑许多因素。内存管理器通过从进程中回收很少使用的内存来实现这一点。这可能需要将数据保存到页面文件。操作系统知道哪些内存块最近被访问过,哪些没有。如果需要,回收内存中的数据仍然可用。所有这些对于不了解它的进程来说都是完全透明的。

当可用内存充足时,进程可以保留它们想要的任何内存。但随着内存使用量的增长,内存管理器会更积极地努力维护可用内存。数据被写入页面文件,并且需要其他磁盘访问来回收先前删除的内存。这就是磁盘抖动的原因。

内存管理器会尽力避免内存使用率过高。只有在内存压力极大的情况下才会允许 100% 使用率。在此之前,性能就会严重下降。

这种内存管理过程是多年研究、开发和测试的结果。其目标始终是保持整体系统性能。Windows 自 1993 年推出 NT 以来一直这样做,Linux 从一开始就这样做。

因此没有保留任何内存,内存管理器只是试图维持可用内存的合理值。

相关内容