Skip to content

Linux下swapfile的配置

介绍

在windows、macos、Linux系统下,swap都可以有swap分区、swap文件(swapfile)两种形式的swap。目前,windows下默认使用swapfile技术,而Linux下则一般会在安装Linux时配置swap分区。

注意: Linux下称为swap,而windows下常称为虚拟内存,这两个本质上是同一个东西。

Swap space交换空间,是虚拟内存的表现形式。系统为了应付一些需要大量内存的应用,而将磁盘上的空间做内存使用,当物理内存不够用时,将其中一些暂时不需要的数据交换到交换空间,也叫交换文件或页面文件中。

swap作用

  1. 当物理内存不足的时候,将某些在内存中所占用的程序暂时移动到swap当中,让物理内存可以被需要的程序来使用;
  2. Linux会将内存中不常访问的数据保存到swap中,当系统需要再次调用的时候,就把它从swap加载到内存;
  3. 如果你的主机支持电源管理模式,也就是说,你的Linux主机系统可以进入“休眠”模式的话,那么,运行当中的程序状态则会被记录到swap中去,以作为“唤醒”主机状态的依据;
  4. 在某些程序运行时,本来就会利用swap特性来存放一些数据,比如在装Oracle11g的时候会检查swap size;
  5. 但是部分应用不兼容swap,或者是说不需要swap,安装时请阅读官方文档。

swap文件创建规则

参照oracle官方文档设定的标准应这样配置:

  • 4G以内的物理内存,SWAP 设置为内存的2倍。
  • 4-8G的物理内存,SWAP 等于内存大小。
  • 8-64G 的物理内存,SWAP 设置为8G。
  • 64-256G物理内存,SWAP 设置为16G。

但是具体分配多少并没有一个严格的标准,而且很多人选择不分出swap。

注意(没有测试,但是网上可以查到相关介绍):根据swap的功能介绍,Linux下不分swap分区/文件则无法进行休眠

swapfile的好处

这是与swap分区相比的。swapfile比swap分区更方便管理,可方便的进行删除、调整大小等操作。

Linux下配置swapfile

  1. 查看是否开启了swap分区
bash
lsblk

可以看到这里有一个2G大小的swap分区。所以在启用swapfile前要进行关闭。
如果没有则跳到第三步

  1. 关闭swap分区
bash
sudo swapoff /dev/分区名称

如这里我们可以这样关闭swap分区

bash
sudo swapoff /dev/nvme0n1p4
  1. 检查是否已经关闭所有swap
bash
sudo swapon -s

没有输出则代表没有swap开启,就可以进行下一步了。

  1. 创建swapfile
bash
sudo dd if=/dev/zero of=/swapfile bs=1M count=16384 status=progress
  • of:指定输出位置
  • bs:指定单位
  • count:指定大小,单位为 mb
  • status=progress:显示创建进程

这里我创建了一个16G的swapfile。

  1. 修改swapfile
bash
sudo chmod 600 /swapfile

swapfile默认777权限,这是一个漏洞,所以要修改权限。

  1. 对swapfile进行格式化
bash
sudo mkswap /swapfile
  1. 开启swapfile
bash
sudo swapon /swapfile
  1. 检查swapfile是否开启
bash
sudo swapon -s

如果上面步骤没问题,那么就可以看到我们的swapfile了

  1. 修改fstab
shell
sudo nvim /etc/fstab

如果之前开启了swap分区,需要将其注释。然后添加上我们创建的swapfile,这样每次开机就会启用swapfile了。

plain
# swapfile
/swapfile none swap defaults 0 0

配置 swap 使用倾向

在Linux系统中,可以通过设置swappiness参数来确定系统对swap分区的使用原则,swappiness参数取值范围为0到100。

  • swappiness值越低,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用swap分区。
  • swappiness值越高,表示积极地使用swap分区,并且把内存中的数据及时地置换到swap分区。

可以通过下面命令查看:

bash
cat /proc/sys/vm/swappiness

在阿里的轻量云服务器中,上面这个输出为 0,导致服务器不使用/极少使用 swap,即便物理内存快崩溃了。

编辑/etc/sysctl.conf文件,写入如下

bash
vm.swappiness=30

轻量云服务器建议设置为 30

然后执行这个命令

bash
sudo sysctl -p

最后就可以用 cat /proc/sys/vm/swappiness查看到修改后的值了。

关闭swapfile

如果按照上面步骤开启了swapfile,然后现在不想使用swapfile,该如何关闭呢?

  1. 关闭swap
bash
sudo swapoff /swapfile
  1. 修改fstab
    将swapfile的部分注释掉即可

  2. 删除swapfile
    这一步是可选的,如果你下次还想用这个swapfile,那么可以选择保留。不想用的话就直接删除即可

bash
sudo rm /swapfile

Last updated: