简要说明

为了使服务器响应更快,并且防止应用程序运行时出现内存不足的最简单的方法之一就是添加一些交换空间。Swap是存储驱动器上的一个区域,操作系统可以临时存储它无法保存在内存的数据。

通过这种方式可以增加服务器保留在运行内存中的信息。但是有一点需要注意,读取和写入Swap的速度要比内存慢,不过它可以为你的服务器内存不足提供一些帮助。

如果没有Swap,当内存不足时,服务器可能会开始kill应用程序以释放内存,甚至崩溃。这可能会导致你丢失一些尚未保存的数据。

在本文中,我们讲说明如何在centos7服务器上创建和启用Swap。

先决条件

在开始本文之前,需要先完成几个步骤。

  • 安装有centos7系统的服务,并使用具有sudo权限的非root用户。
  • 可以正常通过ssh来登录管理你的服务器

当然,如果你有足够的操作经验和安全意识,也是可以使用root用户来进行操作的。

检测系统是否存在Swap信息

在开始之前,我们应该检查一下我们的存储空间是否有可用的交互空间。
另外,我们可以通过命令swapon通用交换应用程序来查看系统是否已经存在Swap配置。通过-s选项可以显示交换使用情况和简要可用性说明。

swapon -s
---
Filename                Type        Size    Used    Priority
/dev/vda2               partition    524284    263688    -2

如果执行命令没有任何打印,说明不存在交换文件。
另外一种方式就是通过命令free -m,可以显示系统的总体内存使用情况。-m是以兆字节为单位。

free -m
---
              total        used        free      shared  buff/cache   available
Mem:            487         388           6           0          92          72
Swap:           511         257         254

需要确保你有足够的存储空间来分出一部分作为Swap分区文件,通常可以使用df -h显示磁盘存储空间的使用情况。

创建Swap文件

在确保有足够的空间之后,现在我们就可以在文件系统中创建Swap文件了。在root用户/根目录下创建文件swapfile,这个文件名字可以自己定义。

sudo fallocate -l 2G /swapfile

或者

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

通过以上命令创建了一个2G大小的Swap空间。

使能Swap文件

前面我们创建了一个swap文件,但是系统此时还不知道该文件有什么作用。我们需要将该文件格式化为swap,然后启用。

在此之前,调整一下文件的权限,使得除root用户外的其它用户无法操作。

sudo chmod 600 /swapfile

下面,通过以下命令来告知系统Swap空间的设置。

sudo mkswap /swapfile

好了,到现在,这个交换文件就可以作为swap空间使用了,通过一起命令启用

sudo swapon /swapfile

使用最开始的命令进行swap验证

swapon -s
free -m

永久设置

前面的设置启用,在服务器重启之后就会处于未启用状态。因此,我们需要进行一些修改来保证永久启用。

sudo vi /etc/fstab

在文件的底部添加以下信息:

/swapfile   swap    swap    sw  0   0

服务器将在每次启动时检查该文件。

调整Swap设置(可选)

这个部分是可选的,可以通过配置一些选项,在处理交换时对系统性能产生影响。这个是否更改取决于你的应用程序的要求以及个人偏好。

Swappiness

Swappiness参数确定系统将数据从内存交换到Swap空间的频率。这个是介于0到100之间的值,表示将触发交换使用的内存使用百分比。

值接近于0时,除非绝对必要,否则系统不会将数据交换到磁盘空间。这里要说明的是,与swap文件的交换是“昂贵的”,因为它们比与内存交互要慢的多,并且读写速度的这种差异可能导致应用程序性能的显著降低。告诉系统不要依赖交换,通常会使你的系统更快。

在值接近于100时,将尝试更多的数据放入swap中以努力保持更多内存空闲。
我们可以通过读取swappiness配置文件来查看当前的swappiness值:

cat /proc/sys/vm/swappiness

CentOS 7默认为30的swappiness设置,这对于大多数台式机和本地服务器来说是一个公平的中间立场。对于VPS系统,我们可能希望将其移近0。

下面时修改方法:

# 临时设置,保持到重启之后
sudo sysctl vm.swappiness=10
# 永久设置
sudo vi /etc/sysctl.conf
---
# 加入到文件底部
vm.swappiness = 10

Cache Pressure(缓存压力)

另一个可能需要修改的相关值是vfs_cache_pressure。此设置会影响特殊文件系统元数据条目的存储。不断读取和刷新此信息的代价通常非常大,因此将其存储在缓存中的时间更长,这对于系统的性能非常有用。

您可以通过proc查看此缓存压力的当前值:

cat /proc/sys/vm/vfs_cache_pressure

根据上述的当前配置,系统从缓存中删除inode信息的速度非常快,我们可以将之设置的更小,比如50:

# 临时设置
sudo sysctl vm.vfs_cache_pressure=50
# 永久设置
sudo vi /etc/sysctl.conf
---
vm.vfs_cache_pressure = 50

到此,本文结束。

最后修改:2021 年 11 月 28 日 01 : 02 PM