本页内容

  • 什么是 Swappiness?
  • 为什么要修改它?
  • 如何修改 Swappiness?
  • 需要考虑的因素
  • 常见问题解答

什么是 Swappiness?

大多数安装过 Linux 发行版的用户,在磁盘分区阶段一定都注意到了“交换空间”(swap space)的存在(它通常显示为 /sda5)。这是硬盘上的一块专用空间,其大小通常至少设置为物理内存(RAM)容量的两倍,它构成了系统的全部虚拟内存。交换空间也可以由所谓的交换文件(swap-file)提供,当你无法创建专用交换分区时可以使用交换文件。不过一般来说,在速度方面交换分区优于交换文件。Linux 内核会不时地利用这块交换空间,将内存中的部分数据块复制到交换空间中,从而让那些所需内存超过物理可用内存的活跃进程得以继续运行。

Swappiness(交换倾向)是一个内核参数,用于定义 Linux 内核将内存(RAM)内容复制到交换空间的程度(以及频率)。该参数的默认值为“60”,取值范围为“0”到“100”之间的任意整数。swappiness 参数的值越高,内核就越激进地进行交换。

为什么要修改它?

默认值是一种“一刀切”的方案,不可能在所有具体使用场景、硬件规格和用户需求下都同样高效。此外,系统的 swappiness 是决定操作系统整体功能与运行速度表现的一个主要因素。因此,理解 swappiness 的工作原理,以及该参数的不同配置如何改善系统运行,进而提升你的日常使用体验,就显得非常重要。

由于如今的 RAM 内存容量比过去大得多、价格也便宜得多,如今许多用户拥有的内存都足够大,几乎从不需要使用交换文件。这样做带来的明显好处是:交换过程不会再占用任何系统资源,缓存文件也不会毫无缘由地在内存与交换空间之间反复来回移动。

如何修改 Swappiness?

swappiness 参数的值存储在一个位于 /proc/sys/vm 目录下的简单配置文本文件中,该文件名为“swappiness”。如果你通过文件管理器进入该目录,就能找到并打开该文件来查看系统的 swappiness 值。你也可以通过终端(速度更快)输入以下命令来查看或修改它:

sudo sysctl vm.swappiness=10

或者将我使用的“10”替换为“0”到“100”之间的任意其他值。要确认 swappiness 值是否已正确更改为期望的值,只需输入:

cat /proc/sys/vm/swappiness

再次在终端中执行,当前生效的值就会显示出来。

在 Linux 上理解并配置 Swappiness 交换倾向参数

此更改会立即对系统运行生效,因此无需重启。实际上,重启会将 swappiness 恢复为默认值(60)。如果你已经充分测试了你期望的交换值,并且发现它稳定可靠,可以通过编辑另一个文本配置文件 /etc/sysctl.conf 来让更改永久生效。你可以以 root(管理员)身份打开该文件,并在文件末尾添加如下一行来设定 swappiness:vm.swappiness="在此填入你期望的值"。然后保存该文本文件即可完成!

在 Linux 上理解并配置 Swappiness 交换倾向参数

需要考虑的因素

在修改设置时,需要考虑 swappiness 背后的一些数学关系。当参数值为“60”时,意味着内核会在内存使用率达到 40% 时开始交换。将其设为“100”意味着内核会尝试把所有内容都交换出去。将其设为 10(如本教程所做)则意味着当内存使用率达到 90% 时才会使用交换空间,因此如果你拥有足够大的内存,这是一个能轻松提升系统性能的安全选择。

不过,有些用户想要“全都要”,于是将交换值设为“1”甚至“0”。“1”是“主动交换”可设的最小值,而“0”表示完全禁用交换,仅在内存被完全占满时才回退到交换。虽然这些设置在理论上仍然可用,但在内存仅为 2GB 或更低的低配置系统上测试可能会导致系统卡死,使操作系统完全失去响应。通常,要在整体系统性能与响应延迟之间找到那个“黄金平衡点”,需要进行相当多的实验(一如既往)。

常见问题解答

Linux 中的交换空间是什么?

Linux 中的交换空间是硬盘上的一部分空间,在 RAM(随机存取存储器)被完全使用时会启用。当系统需要更多内存资源而 RAM 已满时,内存中的非活跃页面会被移动到交换空间。这一过程以一定的性能损耗为代价为系统提供了额外的内存资源,因为访问硬盘比访问 RAM 更慢。

Linux 中的 Swappiness 是什么?

Swappiness 是一个 Linux 内核参数,用于控制系统在将运行时内存交换出去,与从系统页面缓存(page cache)中丢弃页面之间所偏好的程度。Swappiness 的取值介于 0 到 100 之间;值越低表示越不倾向于交换,值越高则表示越倾向于交换。

如何查看当前的 Swappiness 值?

你可以在终端中运行命令 cat /proc/sys/vm/swappiness 来查看当前的 swappiness 值。该命令会显示当前的 swappiness 值,在许多 Linux 发行版中,其默认值通常设为 60。

如何修改 Swappiness 值?

要临时修改 swappiness 值,可使用命令 sudo sysctl vm.swappiness=,将 替换为你期望的交换倾向级别。要让更改永久生效,请在 /etc/sysctl.conf 文件中添加 vm.swappiness = ,然后运行 sudo sysctl -p。

提高 Swappiness 会提升性能吗?

不一定。提高 swappiness 会导致交换空间被更频繁地使用,由于访问硬盘上的数据比访问 RAM 更慢,这可能会使系统变慢。不过,在内存持续被占满、程序不断被杀死的情况下,提高它会有帮助。这需要在“将更多应用程序保留在内存中”与“使用交换空间带来的性能损耗”之间取得平衡。

交换空间比 RAM 更大是否更好?

交换空间的大小取决于你的系统工作负载与配置。过去,经验法则是交换空间大小为 RAM 的两倍。然而,随着现代系统拥有大量内存,这种做法往往已无必要。更重要的是监控并理解系统的内存使用情况,并据此进行调整。

可以不使用交换空间运行 Linux 吗?

可以,Linux 能够在不使用交换空间的情况下运行,尤其是在拥有大量 RAM 的系统上。然而,当 RAM 耗尽时,没有交换空间可能导致问题,例如应用程序被杀死或系统不稳定。

Swappiness 如何影响 SSD(固态硬盘)?

对于使用 SSD 的系统,Swappiness 是一个重要因素,因为频繁写入交换空间可能会因 SSD 的写入寿命限制而缩短其使用寿命。不过,现代 SSD 通常更加耐用,实际影响可能因 SSD 的品质和工作负载而异。

能否在系统运行时更改交换空间大小?

你可以对运行中的系统调整交换空间的大小。你既可以创建一个新交换文件,也可以调整现有交换文件的大小,然后使用 swapon 和 swapoff 命令激活或停用它。务必确保调整交换空间大小不会影响系统稳定性。

如何在系统中监控交换空间的使用情况?

要监控交换空间的使用情况,你可以使用 free -m 命令查看内存与交换空间使用量,使用 vmstat 获取详细的虚拟内存统计信息,以及使用 top 或 htop 监控实时的内存与交换使用情况及其他系统指标。