Ubuntu Swap 分区

Swap 分区指的就是 linux 的交换分区
Swap 分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到 Swap 分区中,等到那些程序要运行时,再从 Swap 分区中恢复保存的数据到内存中。
Ubuntu 安装后,默认的 Swap 分区容量是 2GB,在编译代码时存在交换分区容量不足,导致编译失败的情况,下面展示了调整 Swap 分区大小到 8G 的过程。

调整 Swap 分区大小

1.首先用 ssh 连接上 Ubuntu 服务器

查看内存分区大小可以用 free -mfree -h 命令

1
2
3
4
5
root@zhao:~# free -h
total used free shared buff/cache available
Mem: 3.8Gi 690Mi 2.7Gi 1.6Mi 640Mi 3.1Gi
Swap: 3.8Gi 0B 3.8Gi

这里可以看到 Swap 分区大小为 3.8G

2.关闭 Swap 分区

先查找 Swap文件 的位置

1
2
3
root@zhao:~# swapon --show
NAME TYPE SIZE USED PRIO
/swap.img file 3.8G 0B -2

可见位置在根目录下,这时我们关闭 Swap 分区,然后再看内存分区大小

1
2
3
4
5
6
7
root@zhao:~# swapoff /swap.img

root@zhao:~# free -h
total used free shared buff/cache available
Mem: 3.8Gi 680Mi 2.7Gi 1.6Mi 641Mi 3.1Gi
Swap: 0B 0B 0B

3.调整/swap.img 到 8GB,并格式化

1
2
3
4
5
6
7
8
root@zhao:~# fallocate -l 8G /swap.img

root@zhao:~# chmod 600 /swap.img

root@zhao:~# mkswap /swap.img
mkswap: /swap.img: warning: wiping old swap signature.
Setting up swapspace version 1, size = 8 GiB (8589930496 bytes)
no label, UUID=535c80d4-c681-4067-b254-dcac37e84b51

4.启用 Swap 分区,再查看内存分区大小

1
2
3
4
5
6
root@zhao:~# swapon /swap.img

root@zhao:~# free -h
total used free shared buff/cache available
Mem: 3.8Gi 686Mi 2.7Gi 1.6Mi 644Mi 3.1Gi
Swap: 8.0Gi 0B 8.0Gi

此时,Swap 已经成功更改为 8G

5.持久化(如果重启后丢失更改)(可选)

你可以通过将新创建的交换文件添加到 /etc/fstab 文件来使更改持久化。
注意:对 /etc/fstab 文件进行任何更改之前,最好先进行备份。

root@zhao:~# cp /etc/fstab /etc/fstab.bak

首先先打开 /etc/fstab 文件,这里可以用 vim 来操作

root@zhao:~# vim /etc/fstab

/swap.img none swap sw 0 0 添加到 /etc/fstab 文件的末尾
当然也可以用以下命令一键添加

echo '/swap.img none swap sw 0 0' | sudo tee -a /etc/fstab

现在一切都准备好了。即使在重新启动你的 Linux 系统后,你的交换文件也会被使用。

6.调整 swappiness 参数(可选)

swappiness 参数决定了交换空间的使用频率。swappiness 值的范围从 0 到 100。较高的值意味着交换空间将被更频繁地使用。Ubuntu 系统默认的 swappiness 是 60。
你可以使用以下命令检查 swappiness 的值

root@VM-4-13-ubuntu:~# cat /proc/sys/vm/swappiness
60

你可以使用以下系统命令动态更改 swappiness 的值

1
2
root@zhao:~# sysctl vm.swappiness=80
vm.swappiness = 80

这种改变只是暂时的。如果要使其永久化,可以编辑 /etc/sysctl.conf 文件,并在文件末尾添加 swappiness 值:

vm.swappiness=25