我只是偶然发现一个随机问题,就像即使仍然有一些可用内存空间,Linux 内核是否会交换任何内存页面?我认为原则上不会,但 Linux 发行版在安装时通常仍然需要专用的交换分区。
换句话说,鉴于我有足够的主内存,我无法彻底使用,我是否可以取消整个交换分区并仍然获得稳定的 Linux 系统?
答案1
即使仍然有一些可用内存空间,Linux 内核是否会交换任何内存页面
查看vim /proc/sys/vm/swapiness
(至少在 Ubuntu 上)。这指定了交换的频率,并且可能意味着即使内存可用,交换也会完成。找到最佳值的真正原因在很大程度上取决于操作系统的工作方式、可用内存和处理器本身。 (我的交换度指定为 60。)
从我在较新的更新中看到的情况来看,如果未指定交换分区,Linux 会使用可用存储空间自动创建 /swapfile(大小会增加到 1-2 GB)。这不会明确耗尽您的辅助存储,而只是让您的计算机运行更流畅。看看 的输出ubuntu@ubuntu:/home/ubuntu$ swapon
。我的是:
NAME TYPE SIZE USED PRIO
/swapfile file 1.1G 123.5M -2
/dev/sda6 partition 2G 1.7G 1
这意味着您几乎可以“获得稳定的 Linux 系统”,而无需交换分区。
唯一的例外是,当您的操作系统休眠/崩溃并且您切换到另一个操作系统时,交换分区可以更轻松地重新加载半保存(或未保存)的信息。 (我不确定,但我认为这是因为交换分区包含一个/hiberfile
。)
答案2
即使仍然有一些可用内存空间,Linux 内核是否会交换任何内存页面?
根据我的经验,它就是这样做的。
换句话说,鉴于我有足够的主内存,我无法彻底使用,我是否可以取消整个交换分区并仍然获得稳定的 Linux 系统?
大约 15 年前,当我第一次在我的 PC 中安装足够的 RAM(当时为 512MB)时,我停止使用 SWAP/页面文件。如果您有足够的 RAM 来满足您的需求,则根本不需要拥有或使用交换/页面文件。
我在运行无交换时没有遇到任何问题。
答案3
有一个内核参数vm.swappiness,它负责内存使用限制的百分比,之后发生交换。你可以看到
sysctl -a | grep vm.swappiness
Ubuntu 中默认为 60%。你可以这样改变它
sysctl -p vm.swappiness=10
或交换。
不要忘记,正在运行的 OOM 杀手会杀死您将来在 RAM 不足的情况下可能不想杀死的进程。