我最初对 swap(piness) 的问题是它交换得太频繁了(即使是swappiness=1
! )。
我还认为 0 会关闭 swappiness - 这是一个误解,
即使你设置了 Swap 仍然有效sudo sysctl -w vm.swappiness=0
!:-)
(要永久设置,编辑/etc/sysctl.conf
和添加/更新vm.swappiness = 0
- 对于 GUI 文本编辑器,我推荐一个“linux notepad”“gedit”,然后你可以这样做sudo gedit /etc/sysctl.conf
)
只有在交换0
时,它才开始表现得更像人们所期望的那样(从大约 98% 的 RAM 满时开始交换),但是我仍然遇到另一个问题 - 当实际上再次释放足够的 RAM 时,交换不会自动返回到 RAM,甚至随着时间的推移。
当然,您可以手动执行sudo swapoff -a; sudo swapon -a
每次关闭交换,最终强制交换被清空到 RAM,然后交换再次开始。
然而,这并不方便,原因有两个 a) 交换会暂时关闭 b) 这是手动的额外检查/运行
有没有办法自动以某种方式实现这一点,最好是“本地” ?
Afaik,没有可用的设置来改变将交换页面返回到 RAM 的趋势。如果您愿意,您可以使用检查 RAM 和 SWAP 的脚本,并在安全时关闭/重新打开交换。在内存有限的系统上,这可能永远不会:清除交换内存的唯一选择是关闭拥有它们的进程。
目前尚不清楚在可能的情况下立即将 SWAP 移回 RAM 有什么好处。Linux 自动管理交换。如果它没有释放占用的交换空间,那是因为交换的内存是不需要的,因此可以愉快地保留在磁盘上,直到需要为止。这样,内存和处理器时间就可以节省用于重要的应用程序的使用。由于交换操作被最小化,您的磁盘得到了保护。
交换的速度取决于您的
swappiness
设置,但也取决于您拥有的 RAM 量。您没有提到您拥有的 RAM 数量。根据您的经验,可以假设您的 RAM 很少(可能 2 GB 或更少),或者您正在使用具有异常内存需求的特定应用程序。在第一种情况下,您可能需要改变您的计算机使用习惯以解决低 RAM 的限制,直到您可以升级物理 RAM。交换绝不是 RAM 的替代品,它只是一种技巧,可以稍微扩展它并在 RAM 有限的系统上允许更多。
在第二种情况下,请不要理会它:您的系统表现最佳,更换未使用的 RAM 以将其留给您的内存占用工作。
如果你必须这样做,那么
swapoff
就是要走的路。您可以通过像这样实现一个 bash 脚本来自动化这个过程:运行脚本
sudo bash scriptfile.sh
或添加systemd
服务以在系统启动时自动运行脚本。