为什么我的一些交换空间正在被使用,而我还有未使用的 RAM?

use*_*997 9 memory linux

与其说是问题,不如说是好奇心;而且,我承认,这是一个令人尴尬的基本问题:

我注意到在很多情况下,在我的 Linux 机器上,我将有大约 500MB 的交换空间在使用,即使我有大约 600MB 的未使用 RAM。

我天真的高级理解是,直到 RAM 耗尽时,交换空间才会生效。

我进一步假设这种情况一定是 Linux 内核造成的,因为请求内存的用户进程只是在逻辑上这样做,并且不知道该内存是由 RAM 还是交换空间物理支持。

这就引出了一个问题,为什么内核会抢先使用交换空间?这是某些性能调整算法的一部分吗?它是否交换到它认为最不可能被访问的内存的磁盘部分(可能是 LRU 方案)?如果是这样,将所有内容都留在 RAM 中,并且仅在接近耗尽时,然后才将 LRU 部分从 RAM 交换到交换空间是否有意义?

我应该澄清一下,我的 linux 服务器有 2GB 的 RAM 和 2GB 的交换空间。

Did*_*set 11

未使用的RAM的一部分,其实是作为硬盘缓存。如果您考虑一下,实际上您会更频繁地读取磁盘的某些部分,而不是访问 RAM 的某些部分。将此 RAM 放在磁盘上,同时使用 RAM 缓存 HDD 数据是有意义的。


Xr.*_*Xr. 7

提前换出东西是有意义的,因为当您真正需要内存时,您不必等到内核完成磁盘访问。

例如,假设您要打开一个大图像。加载图像时,它需要 300MB 的 RAM。如果内核使用了它所能使用的所有 RAM,加载映像需要内核将 200MB 从 RAM 传输到磁盘。如果它事先主动清空 RAM,则可以节省几毫秒。


Dou*_*der 7

2个原因:

  1. (@dtrosset) Linux 将交换未使用的程序位以提供更多缓存和缓冲区。
  2. 您可能在过去使用了更多内存,并换出了一些东西,但它没有被换入,因为它没有被使用过,即使强制它出来的东西现在已经消失了。