当我进入 Ubuntu 中的系统监视器时,大约 75% 的内存已被使用,45% 的交换已被使用。为什么即使内存可用,交换也会被使用?Linux 不会将数据从交换移动到内存吗?
答案1
它能将其移至内存。事实上,您可以完全禁用交换,或者设置“限制”。
这就是所谓的“交换性“。
信息:http://www.linuxvox.com/2009/10/what-is-the-linux-kernel-parameter-vm-swappiness/
如何检查:cat /proc/sys/vm/swappiness
或
sysctl -n vm.swappiness
如何设置该值:echo "10" > /proc/sys/vm/swappiness
你设置的 Swappiness 越大,内核交换的量就越大。因此,如果你只想在需要时使用交换,请将其设置为较低的值需要。
(注意:设置限制时,您必须是 root 身份!)
答案2
当内存可用时,Linux 喜欢同时将数据保存在交换区和缓存区中。如果您在正确的地方查找,您会发现大多数(如果不是全部)“交换出”的数据也缓存在主内存中。
为何?空闲的 RAM 不会带来任何好处,但是,通过保持交换缓存,内核获得了很多灵活性:
是否需要更多实际内存?好的,只需重新分配缓存块。它已经存储在交换中,因此需要先将其写入磁盘。
是否需要换出的块? 好的,它已缓存在内存中,因此我们可以将缓存副本的状态从“缓存”更改为“活动”,并使交换副本无效,而无需触及磁盘。
答案3
如果数据从未被访问过并且可能永远不会被访问,系统为什么要将数据从交换移到内存呢?那将需要无意义的磁盘 I/O 并浪费物理内存。