如何在CentOS 7上添加Swap

使服务器响应更快,并防止应用程序中出现内存不足错误的最简单方法之一是添加一些swap空间Swap是存储驱动器上的一个区域,操作系统可以在该区域临时存储无法再保存在内存中的数据。

这使您能够增加服务器可以保留在其工作内存中的信息量,但有一些注意事项。对于读取和写入,swap比使用内存慢,但它可以为您的服务器内存不足提供良好的安全网。

没有Swap,内存不足的服务器可能会开始查杀应用程序以释放内存,甚至崩溃。这可能会导致您丢失未保存的数据或遇到停机。为确保可靠的数据访问,某些应用程序需要Swap功能。

在本教程中,我们将介绍如何在CentOS 7服务器上创建和启用Swap文件。

注意 尽管swap通常被建议对使用传统旋转硬盘驱动器的系统,但使用SSDs的swap可能会导致硬件随着时间的推移而出现问题。出于这种考虑,我们不建议任何其他使用SSD存储的提供商上启用Swap。这样做会影响底层硬件的可靠性。

准备

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

  • 需要CentOS 7服务器,具有sudo权限的非root用户。

拥有非root用户后,可以使用它来SSH到CentOS服务器并继续安装swap文件。没有服务器的用户可以购买和使用腾讯云服务器或者直接在腾讯云实验室CentOS服务器上体验。

检查系统swap信息

在开始之前,我们应该查看服务器的存储,看看我们是否已经有一些可用的Swap空间。虽然我们可以有多个Swap文件或Swap分区,但通常应该足够了。

我们可以通过使用swapon通用交换实用程序来查看系统是否具有任何已配置的swap。使用-s标志,swapon将在我们的存储设备上显示swap使用情况和可用性的摘要:

swapon -s

如果该命令没有返回任何内容,则摘要为空并且不存在swap文件。

另一种检查swap空间的方法是使用free实用程序,它向我们显示系统的总体内存使用情况。我们可以通过输入以下内容来查看当前内存和swap使用情况(以兆字节为单位):

free -m
             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:            0          0       4095

如您所见,系统中的总swap空间为0.这与我们所看到的swapon相符。

检查可用存储空间

为swap分配空间的典型方法是使用专用于该任务的单独分区。但是,由于硬件或软件限制,并不总是可以改变分区方案。幸运的是,我们可以轻松创建驻留在现有分区上的swap文件。

在我们这样做之前,我们应该了解当前的驱动器使用情况。我们可以输入以下信息来获取此信息

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        59G  1.5G   55G   3% /
devtmpfs        2.0G     0  2.0G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.3M  2.0G   1% /run
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

注意:-h标志只是告诉您dh以人性化的阅读格式输出驱动器信息。例如,不是在分区中输出原始内存块数,而是df-h告诉我们M(兆字节)或G(千兆字节)的空间使用情况和可用性。

正如您在第一行所看到的,我们的存储分区有59千兆字节,因此我们有相当多的空间可供使用,您的实际使用情况可能会有很大不同。

虽然对交换空间的适当大小有很多意见,但这实际上取决于您的应用程序要求和您的个人偏好。通常,等于或两倍系统内存量比较好。

由于我的系统有4千兆字节的内存,并且从我的存储空间中获取的大块数比我愿意参与的更多,我将创建一个4千兆字节的交换空间来匹配我的系统内存。

创建交换文件

现在我们知道了可用的存储空间,我们可以在文件系统中创建swap文件。我们将创建一个文件名为swapfile在root(/)目录中,但如果您愿意,可以将文件命名为其他文件。该文件必须为我们的swap文件分配我们想要的空间量。

创建swap文件的最快和最简单的方法是使用fallocate。此命令立即创建预分配大小的文件。我们可以输入以下内容创建一个4千兆字节的文件:

sudo fallocate -l 4G /swapfile

输入密码以授权sudo权限后,swap文件将立即创建,并且提示将返回给您。我们可以使用以下方法验证是否为swap保留了正确的空间量ls

ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile

如您所见,我们的swap文件是在留出正确数量的空间的情况下创建的。

启用交换文件

现在,我们的文件已创建,但我们的系统不知道这应该用于swap。我们需要告诉我们的系统将此文件格式化为swap,然后启用它。

在我们这样做之前,我们应该调整我们的swap文件的权限,以便除root帐户之外的任何人都无法读取它。允许其他用户读取或写入此文件将是一个巨大的安全风险。我们可以使用以下命令锁定权限chmod

sudo chmod 600 /swapfile

这将仅限制root帐户的读取和写入权限。我们可以再次使用ls

-lh来验证交换文件是否具有正确的权限:

ls -lh /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile

既然我们的swap文件更安全,我们可以通过输入以下内容告诉我们的系统设置swap空间以供使用:

sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf

我们的swap文件现在可以用作swap空间。我们可以通过键入来开始使用它:

sudo swapon /swapfile

为了验证程序是否成功,我们可以检查我们的系统现在是否报告swap空间:

swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        4194300 0     -1

此输出确认我们有一个新的swap文件。我们可以再次使用free实用程序来证实我们的发现:

free -m
             total       used       free     shared    buffers     cached
Mem:          3953        315       3637          8         11        107
-/+ buffers/cache:        196       3756
Swap:         4095          0       4095

我们的swap已成功设置,我们的操作系统将根据需要开始使用它。

使swap文件永久化

我们的swap文件目前已启用,但是当我们重新启动时,服务器将不会自动启用该文件以供使用。我们可以通过修改fstab文件来更改它,该文件是管理文件系统和分区的表。

使用sudo权限在文本编辑器中编辑文件:

sudo nano /etc/fstab

在文件的底部,您需要添加一行来告诉操作系统自动使用您创建的swap文件:

/swapfile   swap    swap    sw  0   0

添加完行后,可以保存并关闭文件。服务器将在每次启动时检查此文件,以便从现在开始准备好使用swap文件。

调整您的交换设置(可选)

您可以配置一些选项,这些选项会在处理交换时对系统的性能产生影响。在大多数情况下,这些配置是可选的,您所做的更改将取决于您的应用程序需求和个人偏好。

Swappiness

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

值接近于零时,除非绝对必要,否则系统不会将数据swap到驱动器。请记住,与swap文件的交互是“昂贵的”,因为它们比与内存的交互慢得多,并且读取和写入速度的这种差异可能导致应用程序性能的显着降低。告诉系统不要依赖swap,通常会使您的系统更快。

接近100的值将尝试将更多数据放入swap中以努力保持更多内存空闲。根据应用程序的内存配置文件或服务器的使用情况,在某些情况下,这可能是更好的选择。

我们可以通过读取swappiness配置文件来查看当前的swappiness值:

cat /proc/sys/vm/swappiness
30

CentOS 7默认为30的swappiness设置,这对于大多数台式机和本地服务器来说是一个公平的中间立场。对于云服务器,我们可能希望将其移近0。我们可以使用sysctl命令将swappiness设置为不同的值。例如,要将swappiness设置为10,我们可以输入:

sudo sysctl vm.swappiness=10
vm.swappiness = 10

此设置将持续到下次重新引导。要在重新启动之间保持设置,我们可以将输出的行添加到sysctl配置文件中:

sudo nano /etc/sysctl.conf

将您的swappiness设置添加到文件的底部:

vm.swappiness = 10

添加完行后,可以保存并关闭文件。服务器现在将自动将swappiness设置为您在每次启动时声明的值。

缓存压力

您可能想要修改的另一个相关值是vfs_cache_pressure。此设置会影响特殊文件系统元数据条目的存储。

不断读取和刷新此信息通常非常昂贵,因此将其存储在缓存中的时间更长,这对于系统的性能非常有用。

您可以通过proc再次查询文件系统来查看此缓存压力的当前值:

cat /proc/sys/vm/vfs_cache_pressure
100

由于当前配置,我们的系统从缓存中删除inode信息的速度太快。我们可以通过使用sysctl将其设置为更保守的设置,如50;

sudo sysctl vm.vfs_cache_pressure=50

vm.vfs_cache_pressure = 50

同样,这仅适用于我们当前的会话。我们可以通过将其添加到配置文件来改变它,就像我们使用swappiness设置一样:

sudo nano /etc/sysctl.conf

在底部,添加指定新值的行:

vm.vfs_cache_pressure = 50

添加完行后,可以保存并关闭文件。服务器现在将自动将缓存压力设置为您在每次启动时声明的值。

结论

按照本教程中的步骤操作,在内存使用方面,你会给你的服务器一些喘息空间。swap空间在避免一些常见问题方面非常有用。

如果遇到OOM(内存不足)错误,或者如果发现系统无法使用所需的应用程序,最佳解决方案是优化应用程序配置或升级服务器。但是,配置swap空间可以为您提供更大的灵活性。

发表评论