在CentOS 7上如何添加交换空间

本文指导如何在CentOS7服务器上创建交换文件以提高响应性和防止内存不足,包括检查现有交换空间、创建交换文件、启用和配置交换设置,如swappiness和vfs_cache_pressure。
摘要由CSDN通过智能技术生成

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

介绍

在使服务器更具响应性并防止应用程序发生内存不足错误的最简单方法之一是增加一些交换空间。交换空间是存储驱动器上的一个区域,操作系统可以在其中临时存储无法保存在内存中的数据。

这使您能够增加服务器可以保存在其工作内存中的信息量,但有一些注意事项。从交换空间读取和写入的速度比使用内存要慢,但它可以为服务器内存不足时提供一个良好的安全保障。

没有交换空间,内存不足的服务器可能会开始终止应用程序以释放内存,甚至崩溃。这可能导致您丢失未保存的数据或经历停机时间。为了确保可靠的数据访问,一些应用程序需要交换空间才能正常运行。

在本指南中,我们将介绍如何在 CentOS 7 服务器上创建和启用交换文件。

先决条件

在开始本指南之前,需要先完成一些步骤。

您需要一个已安装和配置了具有sudo特权的非根用户的 CentOS 7 服务器。如果您尚未完成此操作,可以按照 CentOS 7 初始服务器设置指南中的步骤 1-4 创建此帐户。

一旦您拥有非根用户,就可以使用该用户通过 SSH 登录到您的 CentOS 服务器,并继续安装交换文件。

检查系统的交换信息

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

我们可以使用swapon,一个通用的交换工具,来查看系统是否已配置了任何交换空间。使用-s标志,swapon将显示存储设备上的交换使用情况和可用情况的摘要:

swapon -s

如果命令没有返回任何内容,则摘要为空,表示没有交换文件存在。

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

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

如您所见,我们系统中的总交换空间为 0。这与我们使用swapon看到的情况相符。

检查可用存储空间

分配交换空间的典型方法是使用专用于此任务的单独分区。但是,由于硬件或软件限制,改变分区方案并非总是可能的。幸运的是,我们可以很容易地创建一个位于现有分区上的交换文件。

在执行此操作之前,我们应该了解当前的驱动器使用情况。我们可以通过输入以下命令来获取此信息:

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标志只是告诉df以人性化的阅读格式输出驱动器信息。例如,df -h将告诉我们分区的空间使用情况和可用情况(以兆字节或千兆字节为单位)。

如您在第一行所见,我们的存储分区有 59 千兆字节可用,因此我们有相当多的空间可供使用。请记住,这是在一个全新的中等大小的 VPS 实例上,因此您的实际使用情况可能会大不相同。

尽管有关交换空间适当大小的意见很多,但实际上取决于您的应用程序要求和个人偏好。通常,与系统内存量相等或是其两倍的交换空间是一个不错的起点。

由于我的系统有 4 千兆字节的内存,将其翻倍将占用我不愿放弃的更大存储空间,因此我将创建一个 4 千兆字节的交换空间以匹配我的系统内存。

创建交换文件

现在我们知道了可用的存储空间,我们可以开始在文件系统中创建一个交换文件。我们将在根目录(/)中创建一个名为 swapfile 的文件,当然,如果你愿意,也可以给文件取其他名字。文件必须分配我们想要的交换文件空间的大小,并且应该在一个连续的块中创建。

最佳的方法是使用 dd 实用程序。以下命令将创建一个 4GB 的文件:

sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB

输入密码以授权 sudo 权限后,交换文件将被创建。这可能需要一些时间,然后提示符将返回给你。我们可以使用 ls 命令来验证是否为交换文件保留了正确的空间:

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

如你所见,我们的交换文件已经以正确的空间被创建。

启用交换文件

目前,我们的文件已经创建,但系统不知道这个文件应该用作交换空间。我们需要告诉系统将此文件格式化为交换文件,然后启用它。

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

sudo chmod 600 /swapfile

这将限制只有 root 帐户有读写权限。我们可以再次使用 ls -lh 来验证交换文件是否具有正确的权限:

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

现在我们的交换文件更加安全,我们可以告诉系统设置交换空间以供使用,输入以下命令:

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

我们的交换文件现在已准备好作为交换空间使用。我们可以通过输入以下命令开始使用它:

sudo swapon /swapfile

为了验证该过程是否成功,我们可以检查系统是否报告了交换空间:

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

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

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

我们的交换已经成功设置,操作系统将在需要时开始使用它。

使交换文件永久化

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

使用带有 sudo 权限的文本编辑器编辑文件:

sudo nano /etc/fstab

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

/swapfile   swap    swap    sw  0   0

添加完毕后,保存并关闭文件。服务器将在每次启动时检查此文件,因此交换文件将从现在开始准备供使用。

调整交换设置(可选)

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

Swappiness

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

当值接近零时,系统只有在绝对必要时才会将数据交换到驱动器上。请记住,与内存交互相比,与交换文件的交互是“昂贵的”,因为它们比内存的读写速度慢得多,这种读写速度的差异可能会显著降低应用程序的性能。告诉系统不要过多依赖交换通常会使系统更快。

接近 100 的值会尝试将更多数据放入交换空间,以保持更多的内存空闲。根据你的应用程序内存配置或服务器用途,这在某些情况下可能是更好的选择。

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

cat /proc/sys/vm/swappiness
30

CentOS 7 默认的 swappiness 设置为 30,这对大多数桌面和本地服务器来说是一个公平的折衷值。对于 VPS 系统,我们可能希望将其调整到接近 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

同样,这仅对当前会话有效。我们可以通过将其添加到配置文件中来改变这一点,就像我们对交换空间设置所做的那样:

sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure = 50

添加完毕后,保存并关闭文件。服务器现在将在每次启动时自动将缓存压力设置为你在配置文件中声明的数值。

结论

通过按照本指南中的步骤操作,你将为服务器在内存使用方面提供了一些空间。交换空间在避免一些常见问题方面非常有用。

如果你遇到了内存不足 (OOM) 错误,或者发现系统无法使用你需要的应用程序,最好的解决方案是优化你的应用程序配置或升级服务器。然而,配置交换空间可以为你提供更多的灵活性,并且可以帮助你在性能较弱的服务器上争取时间。

  • 48
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白如意i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值