![为什么 Linux 不保护操作系统免于交换?](https://linux22.com/image/108488/%E4%B8%BA%E4%BB%80%E4%B9%88%20Linux%20%E4%B8%8D%E4%BF%9D%E6%8A%A4%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%85%8D%E4%BA%8E%E4%BA%A4%E6%8D%A2%EF%BC%9F.png)
据我了解,当 RAM 填满并且内核开始将页面从磁盘到 RAM 来回移动时,程序的响应速度将会降低。然而,就我而言,每次进入交换时,整个系统都会冻结(或严重滞后,鼠标每 10 秒左右移动一次)。我认为这是因为操作系统要么太忙于移动东西,要么正在移动自己的部分进行交换。
为什么我们不能保护操作系统的主要组件(包括图形界面 (X))免于交换(通过将它们固定在 RAM 中),以便我们至少拥有一个响应式操作系统,同时我们的其他应用程序会出现延迟? (或者如果问题是内核太忙,请将交换优先级设置得较低?)
答案1
首先,您可以使用以下一行更改“swappiness” - 您的操作系统使用交换的渴望程度:
sudo bash -c "echo 'vm.swappiness = 15' >> /etc/sysctl.conf"
至于为什么操作系统不锁定 X 服务器,答案很简单:这只是您的用例。看,如果我用我的脚本计算一些东西,我希望它尽可能快(并尽快结束) - 在内存中保留不必要的程序将意味着我的程序必须使用交换,使其变得很多速度慢几个数量级。
许多运行此类占用大量内存的脚本的用户要么根本不使用 X,要么不关心它们,因为他们不理会自己的 PC。
tl;dr:这是一个复杂的设计决策,当前的解决方案可能是最好的。
答案2
如果您谈论保护操作系统的主要组件但禁用它们上的交换,我希望你不应该这样做(无论如何你不能,因为很久以前可执行文件遵守粘性位+t
,这会告诉内核不要交换,但今天它被忽略了)。如果内核决定必须进行交换,那么它肯定有一个正当的理由。 Linux 对内存的使用非常积极,因为空闲的 RAM 是一种浪费的资源。
现在,如果您决定关闭整个交换空间,您可以通过 -
要禁用交换区域:swapoff [-v] specialfile...
禁用所有交换区域:swapoff -a
也看看这个回答了解更多信息。