SWAP空间的类型
在Linux中,通常会遇到两种类型的SWAP空间:
- SWAP分区:通常在安装系统的阶段创建专用的SWAP分区,该分区只能用于交换,不能存储其他文件。当然也可以后期修改分区表增加SWAP分区。
- SWAP文件:这些文件可以放置在文件系统的任何位置。这种方式相对灵活,通常用于后期内存不足的时候临时增加交换空间。
查看SWAP空间
在Ubuntu中可以使用如下命令查看SWAP空间情况(其实大部分Linux发行版本命令类似):
sudo swapon --show

该命令会列出所有的SWAP空间,包括SWAP分区和SWAP文件。如果输出为空,则表示当前系统尚未启用 SWAP 空间。
当然,也可以使用内存查看命令:
sudo free -h

该命令会列出当前内存使用情况,包括物理内存和虚拟内存(SWAP空间)信息。
创建SWAP文件
本文主要关注于使用文件来调整SWAP空间。关于创建SWAP分区其实整体步骤和方法基本一致,毕竟Linux的基本思想就是一切设备皆文件。
只需要创建一个专用分区并将其mount
挂载,然后将其当作本文创建的SWAP文件进行格式化并加入交换池就可以了。
在本节中,我们将创建一个新的SWAP文件,并将其添加到当前的交换池中。
1. 创建一个空白文件
在「终端」中使用以下命令创建一个空白文件:
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

部分说明:
dd
命令是用指定大小的块拷贝文件并进行转换的工具,可以用于备份、恢复、压缩、测试磁盘等操作- if - Input File - 输入文件名; of - Output File - 输出文件名
/dev/zero
是Linux系统中的一个特殊块设备,在每次读取时输出字节零/swapfile
是希望创建的SWAP文件位置,这里直接创建在根目录下命名为swapfilebs
是读入/输出的块的大小,单位为bytes字节count
是拷贝blocks块的数量- 上面创建的文件大小计算为 1M × 2048 = 2G,要创建不同大小的文件,请更改相应的
bs
和count
参数值。 - 可以使用其他工具(例如 fallocate)来创建文件,但在某些情况下,可能会引起问题。更详细的讨论可以在这篇 AskUbuntu 帖子中找到。
2. 设置文件权限
使用以下命令设置正确的文件权限:
sudo chmod 600 /swapfile


3. 格式化文件为SWAP空间
使用使用mkswap
实用程序将文件格式化为SWAP空间:
sudo mkswap /swapfile
4. 将文件加入到SWAP交换池中
使用以下命令激活swap文件并将其添加到交换池中:
sudo swapon /swapfile

至此,SWAP文件就创建完毕。可以使用swapon --show
或free -h
命令检查
另外,使用swapon
命令将文件加入交换池是临时操作,在系统重启后会失效,需要再次手动添加。
如果希望让创建的SWAP文件永久生效,可以将该记录写入系统的文件系统信息fstab中
将相关记录添加到fstab文件
编辑/etc/fatab
文件,例如使用vim进行编辑:
sudo vim /etc/fatab
添加如下内容:
/swapfile swap swap defaults 0 0
其中/swapfile
是前面创建的SWAP文件
调整Swappiness值
Swappiness是Linux内核的一个属性,用于定义Linux系统使用SWAP空间的频率。swappiness
值的范围是0
到100
,较低的值会尽量减少内核对SWAP空间的使用,而较高的值会使Linux内核更积极地使用SWAP空间。
swappiness
的数值记录在/proc/sys/vm/swappiness
文件中
Ubuntu 系统的默认swappiness
值为60
,可以使用以下命令进行查看:
cat /proc/sys/vm/swappiness

如果需要修改,可以直接编辑该文件,也可以使用如下命令(例如将其修改为40
):
sudo sysctl vm.swappiness=40
如果要让设置在系统重启后依然有效,需要在/etc/sysctl.conf
文件中添加以下内容:
vm.swappiness=40
最佳的swappiness值取决于Ubuntu系统的工作负载、物理内存的大小和内存的使用方式,应该逐渐调整这个参数,以找到最佳取值。
删除SWAP文件
要停用并删除SWAP文件,请按照下列步骤操作:
1. 停用SWAP文件
在「终端」中运行以下命令停用 SWAP 文件:
sudo swapoff -v /swapfile
-v | --verbose
:执行的时候显示详细信息
2. 修改fstab文件,删除相关记录
如果创建的时候在fatab
文件中添加了有关记录使其永久生效,删除的时候也应该相应的在/etc/fstab
文件中删除swap相关的行
3. 删除SWAP文件
最后,直接删除SWAP文件就可以了:
sudo rm /swapfile
调整SWAP文件大小
方法一:创建新的SWAP文件
如果是要增加SWAP空间的大小,可以直接按照前面所述的方法再创建一个新的空白文件并添加到交换池中
添加后使用swapon --show
查看会显示出每个文件的具体信息,而使用free -h
查看则会发现其将两个文件合并显示为一条信息
方法二:重新创建SWAP文件
如果要减小SWAP空间或者不希望分成两个文件,可以先将当前的文件删除,然后重新创建
具体过程不在赘述
方法三:使用dd命令追加内容
如果是希望增加SWAP空间,又不想分成多个文件,可以直接使用dd
命令追加空间
注意要操作SWAP文件,先运行以下命令将其从交换池中移除:
sudo swapoff /swapfile
重新运行dd
命令来增加文件的大小:
sudo dd if=/dev/zero of=/swapfile bs=1G count=2 oflag=append conv=notrunc
- 默认情况下,dd会覆盖输出文件(如果of已经存在)。如果希望将其改为附加文本模式,请将
oflag
设置为append
,conv
设置为notrunc
conv=
:转换列表- 指定数据转换方式。常见的转换选项包括:
notrunc
:不截断输出文件noerror
:遇到读取错误时继续sync
:使用零填充不足的块swab
:交换每对字节ascii
:转换为ASCIIebcdic
:转换为EBCDICibm
:转换为IBM EBCDIClcase
:转换为小写ucase
:转换为大写block
:转换为块格式unblock
:转换为非块模式
- 指定数据转换方式。常见的转换选项包括:
修改后重新将文件格式化:
sudo mkswap /swapfile
并将其作为交换文件启用:
sudo swapon /swapfile
参考:
Comments | NOTHING