当 Linux 系统消耗完物理内存时,非活动页面会被移动到 SWAP 空间。SWAP 空间可以采用专用的 SWAP 分区或以 SWAP 文件的形式存在。然而,在大多数情况下,在虚拟机中运行 Ubuntu 系统时,并不会自动创建 SWAP 空间。
本文系统极客就为大家介绍,如何在 Ubuntu 中创建、删除和调整 SWAP 空间。
本文内容涵盖
- Linux 中的 SWAP 空间
- 是否有必要进行交换
- SWAP 空间的类型
- Ubuntu 中的 SWAP 文件
- 查看 SWAP 空间
- 创建 SWAP 文件
- 调整 Swappiness 值
- 删除 SWAP 文件
- 调整 SWAP 空间大小
- 调整 SWAP 分区大小
- 调整 SWAP 文件大小
Linux 中的 SWAP 空间
计算机的物理内存(RAM)被 Linux 内核划分为称为「页面」的块,将「页面」复制到预配置的次要存储设备(通常是 HDD 或 SSD)的动作就称为「交换」。预配置的专用空间称为「 SWAP 空间」,物理内存(RAM)和 SWAP 空间的总量称为虚拟内存。
是否有必要进行交换
进行交换有几个原因:
- 当内存需求超过可用物理内存时,交换不太重要的「页面」可以释放更多内存。
- 在程序启动期间,大部分「页面」可能很少被使用。交换这些「页面」可以为其他应用程序释放更多内存。
- 如果没有分配 SWAP 空间,当 RAM 完全被占用时,可能导致系统崩溃,特别是只有小 RAM 空间的系统。
但是使用 SWAP 也存在一些缺点:
- 与 RAM 相比,次要存储设备(如 HDD、SSD 等)的速度通常比较慢。以速度对比来看,RAM 的访问速度以纳秒为单位,而磁盘的访问速度以毫秒为单位。
- 由于读写速度的差异,交换过程会比较缓慢。当进行大量交换时,最终会导致系统变慢。
SWAP 空间的类型
在 Linux 中,通常会遇到两种类型的 SWAP 空间:
- 专用的 SWAP 分区:该分区只能用于交换,不能存储其他文件。
- SWAP 文件:这些文件可以放置在文件系统的任何位置。
根据可用的 RAM 大小,SWAP 空间的大小可以不同。
Ubuntu 中的 SWAP 文件
Ubuntu 通常使用专用的 SWAP 分区进行交换。在大多数情况下,SWAP 分区会在安装过程中自动创建,但也可以根据需要自由创建和调整 SWAP 文件。
查看 SWAP 空间
在开始创建之前,请先使用以下命令检查您的 Ubuntu 系统是否已启用 SWAP 空间:
sudo swapon --show
查看 SWAP 空间
该列表会包含所有的 SWAP 空间,包括 SWAP 分区和 SWAP 文件。如果输出为空,则表示当前系统尚未启用 SWAP 空间。
虽然可能,但同一台 Linux 计算机上有多个 SWAP 空间的情况并不常见。
创建 SWAP 文件
与 SWAP 分区相比,SWAP 文件具有一个重要的优势,即文件大小可以轻松调整,而无需触及磁盘分区来更改交换空间的大小。
在本节中,我们将创建一个新的 SWAP 文件,并将其添加到当前的交换池中。
1在「终端」中使用以下命令创建一个空白文件:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
创建 SWAP 文件
- 文件大小计算为 1M X 2048 = 2G,要创建不同大小的文件,请更改相应的
count
参数值。 /dev/zero
是 Linux 系统中的一个特殊块设备,在每次读取时输出零字节。- 可以使用其他工具(例如 fallocate)来创建文件,但在某些情况下,可能会引起问题。更详细的讨论可以在这篇 AskUbuntu 帖子中找到。
2使用以下命令设置正确的文件权限:
sudo chmod 600 /swapfile
3使用使用mkswap
实用程序将文件格式化为 SWAP 空间:
sudo mkswap /swapfile
4使用以下命令激活 swap 文件并将其添加到交换池中:
sudo swapon /swapfile
5要让创建好的 SWAP 空间永久生效,需要将 swapfile 路径内容写入到/etc/fstab
文件当中:
/swapfile swap swap defaults 0 0
配置 SWAP 文件永久生效
6使用swapon
或free
命令验证 SWAP 文件是否处于活动状态,如下所示:
sudo swapon --show
##或者
sudo free -h
验证 SWAP 文件状态
调整 Swappiness 值
Swappiness 是 Linux 内核的一个属性,用于定义 Linux 系统使用 SWAP 空间的频率。swappiness
值的范围是0
到100
,较低的值会尽量减少内核对 SWAP 空间的使用,而较高的值会使 Linux 内核更积极地使用 SWAP 空间。
Ubuntu 系统的默认 Swappiness 值为60
,您可以使用以下命令进行查看:
cat /proc/sys/vm/swappiness
值为60
对于 Ubuntu Desktop 来说还可以,但对于 Ubuntu Server来说,SWAP 的使用频率就比较高了,所以您可能需要将值设置得较低一些。例如,要将swappiness
值设置为40
,请执行以下命令:
sudo sysctl vm.swappiness=40
查看及调整 Swappiness 值
如果要让设置在系统重启后依然有效,需要在/etc/sysctl.conf
文件中添加以下内容:
vm.swappiness=40
最佳的 swappiness 值取决于 Ubuntu 系统的工作负载和内存使用方式,您应该逐渐调整这个参数,以找到最佳取值。
删除 SWAP 文件
要停用并删除 SWAP 文件,请按照下列步骤操作:
1在「终端」中运行以下命令停用 SWAP 文件:
sudo swapoff -v /swapfile
2在/etc/fstab
文件中删除 swap 相关的行。
3最后执行以下命令删除 swapfile 文件:
sudo rm /swapfile
删除 SWAP 文件
调整 SWAP 空间大小
根据 SWAP 空间的类型(分区或文件),调整大小的过程可能会有所不同。
调整 SWAP 分区大小
如果分区后面有未分配的空间,才能扩展分区大小。否则,唯一的调整选项是缩小分区大小。这也同样适用于 SWAP 分区。
如果您使用的是 GNOME 桌面环境,「磁盘」应用程序可以提供相关信息。
使用「磁盘」工具查看及调整 SWAP 分区大小
或者,可以使用 GParted 来进行可视化。
使用 GParted 工具查看及调整 SWAP 分区大小
如您所见,在这个系统中,交换分区直接紧邻根分区。这样就没有空间来扩展 SWAP 分区了。
调整 SWAP 文件大小
1要操作 SWAP 文件,请运行以下命令将其从交换池中移除:
sudo swapoff /swapfile
2重新运行dd
命令来增加文件的大小:
sudo dd if=/dev/zero of=/swapfile bs=1G count=2 oflag=append conv=notrunc
调整 SWAP 文件大小
3在这里,我们将交换文件增加到 2GB。接下来,使用以下命令将文件重新格式化为交换空间:
sudo mkswap /swapfile
4将其作为交换文件启用:
sudo swapon /swapfile
本文我们详细讨论了在 Ubuntu 中管理 SWAP 空间的示例,探讨了不同类型的 SWAP 空间,并学习了如何调整 SWAP 分区大小以及如何使用 SWAP 文件(创建、删除和调整大小)。