目录
[TOC]
一、在开始之前
交换分区不应该被当作物理内存的替代品。因为交换分区是硬盘驱动器的一部分,它比物理内存更慢的访问时间。如果你的系统经常内存耗尽,你应该添加更多内存。
通常,交换文件大小依赖于你的系统有多少 RAM 内存:
少于2 GB
RAM 内存的系统 - 2倍 RAM
内存的大小2 到 8 GB
RAM 内存的系统 - 同样 RAM
内存大小大于 8 GB
RAM 内存的系统 - 至少 4 GB
交换文件
仅仅只有 root 或者其他有 sudo 权限的用户能够激活 swap 文件。
二、创建一个交换文件
在这个例子中,我们创建2 GB
交换文件。如果你想添加更多交换文件,将2G
替换成你需要设置的交换空间的大小。
完成下面的步骤,在 Ubuntu 20.04 上添加交换空间:
01.首先,创建一个用作交换文件的文件:
sudo fallocate -l 2G /swap.img
如果fallocate工具在你的系统上不可用,或者你获得一个消息:fallocate failed: Operation not
supported,使用下面的命令去创建交换文件:
sudo dd if=/dev/zero of=/swap.img bs=1024 count=2097152
02.设置文件权限到600
阻止常规用户读写这个文件:
sudo chmod 600 /swap.img
03.在这个文件上创建一个 Linux 交换区:
sudo mkswap /swap.img
输出如下:
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=fde7d2c8-06ea-400a-9027-fd731d8ab4c8
04.通过运行下面的命令,激活交换区:
sudo swapon /swap.img
想要持久化,打开/etc/fstab
文件:
sudo vim /etc/fstab
并且粘贴下面的行:
/swap.img swap swap defaults 0 0
或者这个也行,效果和上面的一样
/swap.img none swap sw 0 0
05.使用swapon
或者free
命令来验证交换区是否已激活,像下面这样:
sudo swapon --show
NAME TYPE SIZE USED PRIO
/swap.img file 2G 0B -1
sudo free -h
total used free shared buff/cache available
Mem: 981Mi 97Mi 68Mi 0.0Ki 814Mi 735Mi
Swap: 2.0Gi 10Mi 1.9Gi
三、调整 Swappiness 值
Swappiness 是一个 Linux 内核属性,用来定义系统将会有多频繁使用交换分区。它取值范围从 0
到 100
。一个较低的取值可以在可能的情况下,尽量避免交换,而一个较高的值会使得内核更频繁地使用交换分区。
在 Ubuntu 上,默认的 Swappiness 取值被设置成 60
。你可以通过输入下面的命令检查这个当前值:
cat /proc/sys/vm/swappiness
输出如下:60
Swappiness 为 60
适合大部分 Linux 操作系统,对于生产服务器,你需要将这个值设置成更低。
例如,将 Swappiness 值修改成 10
,运行:
sudo sysctl vm.swappiness=10
想要将这个参数持久化,在重启时仍然起作用,将下面的内容附加到/etc/sysctl.conf
vim /etc/sysctl.conf
vm.swappiness=10
最理想的 swappiness 取决于你的系统,以及内存是怎么被使用的。如果想尽量不用swap就设置为1
四、调整swap大小
实际上就是删除原有swap分区再新建一个
使用swapon -s
查看:
[root@instance ~]# swapon -s
文件名 类型 大小 已用 权限
/swap.img partition 8388604 482392 -2
swap分区为/dev目录下文件sda2。切勿直接删除这个文件,我们卸载该swap分区:
swapoff /swap.img
[root@instance ~]# swapon -s
htop,可以看到swap分区的容量逐渐变小,内存所占容逐渐增加
完成后swapon
检查一下是否成功删除swap分区
最后再根据上文新建一个swap分区
五、移除一个交换文件
想要取消激活,并且删除交换文件,按照下面的步骤:
如果不知道交换文件的位置的话,可用swapon -s
查询
01.首先,取消激活交换空间:
sudo swapoff -v /swap.img
02.下一步,从/etc/fstab
文件中移除交换文件条目/swap.img swap swap defaults 0
vim /etc/fstab
删除/swap.img
开头的行,保存退出
03.使用rm命令删除实际的交换区文件:
sudo rm /swap.img
04.最后重启即可(非必需)
reboot