December 17, 2016

CentOS 7配置SWAP分区

什么是SWAP分区

在物理磁盘上创建的内存交换分区,可用作内存。上网传言,SWAP分区大小一般为物理内存的2倍,8G封顶。理论上,需要8G以上的交换分区时,不要再使用SWAP,否则会严重影响磁盘IO。

创建SWAP分区

  1. 创建交换分区文件

    $ dd if=/dev/zero of=/swapfile bs=block_size count=number_of_block
    

    注:block_size、number_of_block 大小可以自定义,比如 bs=1M count=1024 代表设置 1G 大小 SWAP 分区。如果bs=1,则为1字节大小。

  2. 设置交换分区文件

    $ mkswap /swapfile
    
  3. 设置交换分区文件权限,如果没有设置,可能会在第4步提示文件不安全

    $ chmod 600 /swapfile
    
  4. 立即启用交换分区文件

     $ swapon /swapfile
    

    注:如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a

  5. 设置开机启动SWAP分区

     $ echo 'swapfile swap swap defaults 0 0' >> /etc/fstab
    
  6. 修改 swpapiness 参数 在 Linux 系统中,可以通过查看 /proc/sys/vm/swappiness 内容的值来确定系统对 SWAP 分区的使用原则。当 swappiness 内容的值为 0 时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区。当 swappiness 内容的值为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。

    查看修改前为 0,需要在物理内存使用完毕后才会使用 SWAP 分区:

    $ cat /proc/sys/vm/swappiness
    

    修改当前值

    $ echo 10  > /proc/sys/vm/swappiness
    

    若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf 文件,并增加以下内容:

    # vim /etc/sysctl.conf
    vm.swappiness=10
    # sysctl -p
    

关闭SWAP分区

  1. 确认SWAP路径

    $ free -m
    
  2. 关闭SWAP分区

    $ swapoff /swapfile
    
  3. 取消 swappiness 参数值

    $ echo 0  >/proc/sys/vm/swappiness
    

    若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf 文件,并增加以下内容:

    # vim /etc/sysctl.conf
    vm.swappiness=0
    # sysctl -p
    
  4. 通过$ free -m确认SWAP分区已经关闭

参考:云服务器 ECS Linux SWAP 配置概要说明