即使大多数内存都被“缓存”,交换空间仍然被使用?

即使大多数内存都被“缓存”,交换空间仍然被使用?

我试图理解这个free -m输出:

             total       used       free     shared    buffers     cached
Mem:          7971       7608        363          1         17       4703
-/+ buffers/cache:       2887       5084
Swap:          975        967          8

因此,即使进程实际使用 8GB RAM 中的 3GB,也会使用交换?为什么会发生这种情况,操作系统不应该使用更少的内存用于 fs 缓存而不是使用交换吗?

操作系统Ubuntu 14.04.3 LTS采用默认设置。

答案1

操作系统不应该使用更少的内存用于 fs 缓存而不是使用交换吗?

我猜操作系统过去曾经内存不足并交换了一些内存。

现在短缺已经结束,但交换区中剩余的页面并未使用,因此操作系统最好为包括 fs 缓存在内的“热”数据保留 RAM,而不是这些未使用的页面。

答案2

Linux 在将页面交换到磁盘方面非常积极。

这并不意味着 RAM 中不再有该页面的副本,但它仍然可以在交换缓存(缓存写入磁盘的页面的 RAM 部分)中复制。这样做的优点是,当某些进程需要内存时,可以立即释放 RAM 中的页面。您可以通过以下方式查看金额:

grep SwapCached /proc/meminfo

此外,如果进程的页面被换出,并不意味着该进程曾经需要这些页面,而是可以来自某些链接库,而这些页面从未使用过这些函数/数据段。

看一下https://serverfault.com/questions/550793/how-to-find-what-is-using-linux-swap-or-what-is-in-the-swap有关该主题的介绍,还有一个脚本链接,可以查看交换出的内容。

根据经验,虚拟内存管理有时可能会令人困惑:

通常您不应该关心交换有多大,而应该关心正常活动中换入和换出的量(检查 vmstat)。

相关内容