我试图理解这个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)。