当 Linux 系统消耗完物理内存时,非活动页面会被移动到 SWAP 空间。SWAP 空间可以采用专用的 SWAP 分区或以 SWAP 文件的形式存在。然而,在大多数情况下,在虚拟机中运行 Ubuntu 系统时,并不会自动创建 SWAP 空间。
本文系统极客就为大家介绍,如何在 Ubuntu 中创建、删除和调整 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 空间。
虽然可能,但同一台 Linux 计算机上有多个 SWAP 空间的情况并不常见。
创建 SWAP 文件
与 SWAP 分区相比,SWAP 文件具有一个重要的优势,即文件大小可以轻松调整,而无需触及磁盘分区来更改交换空间的大小。
在本节中,我们将创建一个新的 SWAP 文件,并将其添加到当前的交换池中。
1在「终端」中使用以下命令创建一个空白文件:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
- 文件大小计算为 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
6使用swapon
或free
命令验证 SWAP 文件是否处于活动状态,如下所示:
sudo swapon --show
##或者
sudo free -h
调整 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
如果要让设置在系统重启后依然有效,需要在/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 分区。
如果您使用的是 GNOME 桌面环境,「磁盘」应用程序可以提供相关信息。
或者,可以使用 GParted 来进行可视化。
如您所见,在这个系统中,交换分区直接紧邻根分区。这样就没有空间来扩展 SWAP 分区了。
调整 SWAP 文件大小
1要操作 SWAP 文件,请运行以下命令将其从交换池中移除:
sudo swapoff /swapfile
2重新运行dd
命令来增加文件的大小:
sudo dd if=/dev/zero of=/swapfile bs=1G count=2 oflag=append conv=notrunc
3在这里,我们将交换文件增加到 2GB。接下来,使用以下命令将文件重新格式化为交换空间:
sudo mkswap /swapfile
4将其作为交换文件启用:
sudo swapon /swapfile
本文我们详细讨论了在 Ubuntu 中管理 SWAP 空间的示例,探讨了不同类型的 SWAP 空间,并学习了如何调整 SWAP 分区大小以及如何使用 SWAP 文件(创建、删除和调整大小)。
总结的很到位,感谢!
我就从没看见我的SWAP分区有使用过。编程内存都溢出爆满了也没看见用。