为Ubuntu启用Swap分区

简介

保护应用程序远离out-of-memeory错误的一种最简单方式,就是为服务器增加交换区。本文将介绍如何为Ubuntu Server添加交换区。

警告:在SSD磁盘上启用swap分区,可能导致系统不稳定。

什么是Swap分区

Swap分区是磁盘上的一块区域,当RAM空间不够使用时,系统会根据调度算法,将一部分内存数据存储到Swap分区中,从而保证应用正常执行。

Step1-检查系统的Swap信息

检测是否有swap分区:

root@oaoa:~# swapon --show

如果系统没有交换区,则不会有任何输出。

可以使用free命令检测是否有正在使用的swap空间:

root@oaoa:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           989M        135M        109M         11M        744M        661M
Swap:            0B          0B          0B

Step2-检查磁盘可用空间

在创建swap分区之前,先检查磁盘空间是否足够:

root@oaoa:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            473M     0  473M   0% /dev
tmpfs            99M   11M   89M  11% /run
/dev/vda1        25G  2.7G   21G  12% /
tmpfs           495M     0  495M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           495M     0  495M   0% /sys/fs/cgroup
tmpfs            99M     0   99M   0% /run/user/0

Step3-创建Swap文件

接下来,使用fallocate命令,创建一个名为swap的交换分区,由于我需要搭建gitlab, 所以交换分区大小设置为3G:

root@oaoa:~# fallocate -l 3G /swap

检测交换分区文件是否创建成功:

root@oaoa:~# ls -lh /swap
-rw-r--r-- 1 root root 3.0G Jul  7 10:29 /swap

Step4-启用Swap文件

经过上面的步骤,已经在磁盘上预留了指定大小的磁盘空间,现在需要激活交换分区。

首先,需要禁用其他用户的读取权限,否则,会产生重大安全隐患。

使文件只有root用户可访问:

sudo chmod 600 /swap
root@oaoa:~# ls -lh /swap
-rw------- 1 root root 3.0G Jul  7 10:29 /swap

激活swap分区:

sudo mkswap /swap
sudo swapon /swap

检测交换分区是否可用:

root@oaoa:~# swapon --show
NAME  TYPE SIZE USED PRIO
/swap file   3G   0B   -1

Step5-使Swap文件持久化

上面的改动已经使swap分区生效,但是重启之后就没有了,所以需要在/etc/fstab文件中主动挂在swap分区。

备份fstab文件:

sudo cp /etc/fstab /etc/fstab.bak

添加swap文件信息到/etc/fstab文件末尾:

echo '/swap none swap sw 0 0' | sudo tee -a /etc/fstab

截至到这里,已经完成了swap分区的创建和使用,下面是一些优化设置,可根据实际情况进行取舍。

Step6-调整交换分区设置

  • 调整Swappiness属性

swappiness 参数用于配置系统将RAM数据交换到磁盘的优先级,值为0到100。

  • 值接近于0时,除非绝对必要,否则内核不会将数据交换到磁盘。
  • 值接近于100时,内核会尽可能将数据放入交换区,从而保证更多的RAM空间

一般默认大小为60,可以通过下面命令查看

  cat /proc/sys/vm/swappiness

对于桌面系统,设置为60问题不大,但是对于服务器,最好设置为接近于0,因为与磁盘交互的速度远远慢于与RAM交互的速度。

可以通过sysctl命令修改参数值:

  sudo sysctl vm.swappiness=10

添加到/etc/sysctl.conf文件,使重启之后仍然生效:

  sudo vim /etc/sysctl.conf

在文件末尾添加一行:

  vm.swappiness=10

  • 调整Cache Pressure设置

另一个相关的参数是vfs_cache_pressure,表示系统将选择多少缓存*inode*和*dentry*。基本上,这是关于文件系统的访问数据,一般是非常耗时又请求频繁的,所以缓存会增加性能。

查看系统默认值:

  cat /proc/sys/vm/vfs_cache_pressure

一般默认值为100,系统会很快从缓存中删除inode信息,需要设置一个更加保守的数字,比如50:

  sudo sysctl vm.vfs_cache_pressure=50

添加到/etc/sysctl.conf文件,使重启之后仍然生效:

  sudo vim /etc/sysctl.conf

在文件末尾添加一行:

  vm.vfs_cache_pressure=50

参考文档:https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-18-04


linux

1388 Words

2018-07-07 18:43