首页 在Linux系统上扩展swap空间
文章
取消

在Linux系统上扩展swap空间

在Linux系统上扩展swap空间

一、what is swap?

SWAP的作用类似Windows系统下的“虚拟内存”。当物理内存不足时,拿出部分硬盘空间当SWAP分区(虚拟成内存)使用,从而解决内存容量不足的情况。

当某进程向OS请求内存发现不足时,OS会把内存中暂时不用的数据交换出去,放在SWAP分区中,这个过程称为SWAP OUT。

当某进程又需要这些数据且OS发现还有空闲物理内存时,又会把SWAP分区中的数据交换回物理内存中,这个过程称为SWAP IN。

swap使用完,操作系统会触发OOM-Killer机制,把消耗内存最多的进程kill掉以释放内存。

二、涉及命令

1
2
3
4
5
free:查看内存状态命令,可以显示memory、swap、buffer/cache等的大小及使用状况;
dd:读取,转换并输出数据命令;
mkswap:设置交换区
swapon:启用交换区,相当于mount
swapoff:关闭交换区,相当于umount

三、操作

3.1.查看当前swap情况

1
2
3
4
root@VM-4-6-ubuntu:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        955M        111M        4.9M        765M        697M
Swap:          4.0G        3.5M        4.0G

3.2.关闭所有swap

1
swapoff -a

3.3.创建swap分区的文件

1
dd if=/dev/zero of=swapfile bs=1M count=8192

bs是每块的大小,count是块的数量;bs*count,就是swap文件的大小

swapfile文件路径

3.4.格式化swapfile并启用swap分区文件

1
2
mkswap swapfile
swapon swapfile

3.5.添加开机启动

修改/etc/fstab这个文件,添加或者修改这一行:

1
/swapfile swap swap defaults 0 0
swapfile为全路径

此项不是必须的。如果不修改开机启动配置,重启之后的swap空间会重置,之前配置丢失。

3.6. 设置swap占用

  1. 查看系统的 swappiness

    1
    2
    
    $ cat /proc/sys/vm/swappiness
    ## 一般默认 60  (内存达40 开始使用swap)
    
  2. 修改swappiness值为10
    1
    2
    
    $ sudo sysctl vm.swappiness=10
    ## 临时性的修改,在你重启系统后会恢复默认
    
  3. 永久修改
    1
    2
    
    $ sudo vim /etc/sysctl.conf
    ## 添加 vm.swappiness=10 保存,重启,OK
    

    3.7.[扩展方式] 通过新建分区来扩展原有swap空间

这个是Linode的默认做法,这里也介绍一下。此方法与swap文件类似,只是使用了一个独立分区,而不是文件。

  1. 使用fdisk创建交换分区(假设是 /dev/sdb2

  2. 使用mkswap设置交换分区:

    1
    
    mkswap /dev/sdb2
    
  3. 启用交换分区

    1
    
    swapon /dev/sdb2
    
  4. 修改/etc/fstab添加到开启启动项:

    1
    
    /dev/sdb2 swap swap defaults 0 0
    

参考资料

本文由作者按照 CC BY 4.0 进行授权

Getting Started

马士兵课程结构