即使我们有足够的 RAM 空间,为什么操作系统会使用 SWAP 内存?

即使我们有足够的 RAM 空间,为什么操作系统会使用 SWAP 内存?

在此处输入图片描述

从上图可以看出,我们有 3191 个可用 RAM,但同时交换也使用了大约 661 个字节。为什么会发生这种情况?有人可以对此进行简要介绍吗?

谢谢

答案1

最有可能的原因是,在 Linux 机器上,您的swappiness设置为非零数字。请参阅这个问题以及您有可用内存和交换正在使用的直接原因的可接受答案。也就是说,如果您问这个问题,最好将保留swappiness为默认值。

其他可能的原因:3GB 内存正在使用中,最近才释放。系统不会浪费时间将数据从交换区加载到内存中,直到它知道它确实需要它(即页面错误)

适用于大多数主流现代操作系统的一般解释:

内存永远不够用(除非你的 RAM 比硬盘空间还多)。RAM 不仅仅是应用程序运行所需的内存(“活动”内存)。它还大量用于内存映射文件和缓存数据。

内存管理器的全部目的是查看系统并说“好吧,我有 8GB 内存,并且有$diskSize+$applicationMemory数据可以存入其中。什么是最重要的?” 它将尝试将最不重要的数据移动到磁盘,将最重要的数据移动到内存中。

这对于映射文件和缓存文件非常有效。它们已经存在于磁盘上(作为文件),因此如果它们变得“不重要”,那么系统可以将它们从内存中删除。如果它们再次变得重要,它可以从原始文件中加载它们。应用程序内存则不同;它通常不存在于磁盘上,因此系统必须将不重要的应用程序内存保存到交换中。

问题是将不重要的应用程序内存保存到磁盘的速度与从磁盘加载重要文件的速度一样慢;为了尽量减少等待卸载不重要的应用程序内存所花费的时间,系统将预先“猜测”哪些内存不重要,并提前将其复制到交换区。这样,当出现更重要的内容时,系统就可以直接从 RAM 中删除应用程序内存。


如果您想知道有什么比活动应用程序内存更重要,请考虑每 24 小时检查一次更新的后台进程。99.9% 的时间里,这个程序什么也不做,只是在睡觉。系统将识别此类应用程序,并将它们推送到交换区,以便为缓存文件(如日志或配置文件,每秒可能会多次写入或读取)提供更多空间。


总结:您没有足够的 RAM(RAM < 磁盘大小 + 应用程序内存)。可用 RAM 是一种暂时的假象,将随着您使用系统而得到纠正。交换正在使用中,因为系统已识别出低优先级的应用程序内存,并且已经将其推送它的副本到磁盘,以便它可以非常快速地为更高优先级的事物腾出空间(如果需要)。

答案2

TL;DR:它们是曾经存在于内存中的信息的副本(可能仍然存在),并且很长时间未被访问或修改。

当您的系统启动时,许多服务开始运行。这些服务会分配内存、读取配置等。它们会弄脏一些内存页面。许多此类服务在系统运行的整个过程中都不会再运行,因为您不会使用它们。但操作系统无法丢弃它们修改的内存页面。其中一些可能很重要。

现在,您的系统可以在内存压力大且必须进行分页时将这些页面写入交换区。但那时进行额外 I/O 操作是最糟糕的时机,因为那时 I/O 会限制系统的性能。

因此,当它有足够的空闲 I/O 带宽时,它会立即将这些页面写入交换区。这样,如果稍后遇到内存压力,它可以安全地丢弃它们而无需额外的 I/O,因为它可以从交换区中读回它们。

如果它最终确实丢弃了这些页面,那么还有另一个好处。系统现在有更多的 RAM 可以用作磁盘缓存。

相关内容