Ubuntu 18.04 配置交换空间
前言
当电脑运行内存不足的时候,我们一般会想到通过给电脑加内存条的方式来增加内存。
对此,本文提供了运行内存不足的另一个解决方案:为电脑配置交换空间。
本文的目标系统为 Ubuntu 18.04 。
交换空间的概念
交换空间是硬盘驱动器上的一个区域,它被指定为电脑需要临时存储但无法再保存在 RAM 中的数据的位置。
由于写入磁盘比写入 RAM 慢得多,因此操作系统更愿意在内存中运行应用程序数据,并使用、交换旧数据。
简而言之,交换空间可以看做系统 RAM 耗尽时的后备空间。
配置步骤
- 检查系统交换空间情况,没有任何回显信息代表当前系统无可用交换空间
sudo swapon --show
或者使用 htop 命令查看
- 创建交换文件之前,首先检查下磁盘使用情况,本例中 /dev/vda1 仅有 25G 可用空间
df -h
- 创建一个指定大小文件 swapfile ,将其作为交换文件,文件 swapfile 创建至根目录(/)下
sudo fallocate -l 2G /swapfile mkswap /swapfile
本例创建的交换文件大小为 2G ,等于本机 RAM 。
个人建议交换文件配置为等于或者 N 个 0.5 倍数于 RAM
验证是否创建成功:
ls -lh /swapfile
- 修改交换文件权限,仅 root 用户可以读取该文件内容,防止普通用户访问,减少安全隐患
sudo chmod 600 /swapfile
- 启用交换文件(临时)
sudo swapon /swapfile
或使用 htop 查看
-
永久化启用交换文件
首先,备份 /etc/fstab 文件,防止下面设置出现问题
然后,将 ‘/swapfile none swap sw 0 0’ 添加到 /etc/fstab 文件末尾
该句的意思是将 ‘/swapfile none swap sw 0 0’ 作为标准输出打印,tee -a 随后将标准输出以追加模式写入到 /etc/fstab 文件
'/swapfile none swap sw 0 0' 对应如下: <file system> <mount point> <type> <options> <dump> <pass>
sudo cp /etc/fstab /etc/fstab.bak echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
- 交换设置,调整 swappiness 属性(可选)
cat /proc/sys/vm/swappiness
swappiness 属性配置系统将数据从 RAM 交换到交换空间的频率。
介于 0 和 100 之间,表示百分比。
临时调整 swappiness 值(重启时效失效),比如将其设为 50 。
sudo sysctl vm.swappiness=50
永久化调整 swappiness 值,比如将其设为 30 。
编辑 /etc/sysctl.conf 文件 sudo vim /etc/sysctl.conf 在 /etc/sysctl.conf 文件最后一行加入,保存退出 vm.swappiness=30
- swappiness 解析
swappiness=0 的时候表示最大限度使用物理内存,然后才是 swap空间;
swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
譬如:当 swappiness=40 ,即是说当内存使用到 100-40=60% 的时候,才开始使用交换空间。