如何在 CentOS 7 上添加 Swap
1. 介绍
提高服务器响应速度和防止应用程序内存不足错误的最简单方法之一是添加一些交换空间。 Swap 是硬盘上的一个区域,它被指定为操作系统可以临时存储数据的地方,这些数据不能再保存在 RAM 中。
写入磁盘的信息将比保存在 RAM 中的信息慢,但操作系统更愿意将应用程序数据保存在内存中,并使用 Swap 交换旧数据。总的来说,当系统的 RAM 耗尽时,将 Swap 作为数据存储空间是一个很好的选择。
在本指南中,我们将介绍如何在 CentOS 7 服务器上创建和启用交换文件。
2. 检查系统的交换信息
在我们开始之前,我们将看看我们的操作系统,看看我们是否已经有一些可用的交换空间。我们可以有多个交换文件或交换分区,但通常一个就足够了。
我们可以通过键入以下命令来查看系统是否有任何配置交换:
sudo swapon -s
如果返回空,表示目前没有启用任何 Swap。
另一个检查 Swap 的方法是使用free
命令,它显示了系统内存使用的情况:
free -m
total used free shared buff/cache available
Mem: 472 111 36 4 324 308
Swap: 0 0 0
3. 检查硬盘驱动器分区上的可用空间
为 swap 分配空间的典型方式是使用专门用于该任务的单独分区。但是,改变分区方案并不总是可能的。我们可以轻松地创建驻留在现有分区上的交换文件。
在我们这样做之前,我们应该知道我们当前的磁盘使用情况。我们可以通过输入以下内容来获得这些信息:
df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root 17G 5.0G 13G 30% /
devtmpfs 226M 0 226M 0% /dev
tmpfs 237M 0 237M 0% /dev/shm
tmpfs 237M 4.6M 232M 2% /run
tmpfs 237M 0 237M 0% /sys/fs/cgroup
/dev/sda1 1014M 139M 876M 14% /boot
tmpfs 48M 0 48M 0% /run/user/0
正如第一行中看到的,我们的硬盘分区有 13G 可用,所以我们有大量空间可用。这是在一个新的,中等规模的 VPS 实例上,所以你的实际使用可能会有很大的不同。
尽管对于交换空间的适当大小有很多意见,但这取决于你的个人偏好和应用程序要求。一般来说,等于或者是系统内存量的两倍是一个很好的起点。
由于我的老古董机器只具有 512M 的 RAM,并且加倍会占用我不太愿意被占用的大量磁盘空间,所以我将创建 1GB 的交换空间以匹配我系统的 RAM。
4. 创建一个交换文件
现在我们知道了可用的存储空间,我们可以在我们的文件系统中创建一个交换文件。我们将swapfile
在我们的 root(/
)目录中创建一个文件,尽管如果你愿意,可以将文件命名为其他文件。该文件必须分配我们想要的交换文件的空间量。
传统上,我们将通过使用该dd
命令来创建具有预分配空间的文件。这个多功能的磁盘工具从一个位置写入另一个位置。
我们可以使用它在 Linux 系统中的特殊设备上将文件零写入文件,该系统/dev/zero
只需要根据请求分配尽可能多的零。
我们使用bs
块大小和count
块数的组合来指定文件大小。我们分配给每个参数几乎完全是任意的。重要的是它们相乘的结果。
例如,在我们的例子中,我们正在创建一个 1G 的文件。我们可以通过指定 1M 的块大小和 1024:
也可以指定 1G 的块大小和 1,但是如果在系统本身内存小于 1G 的情况下会由于
输入缓冲导致内存耗尽
而失败 块大小越大速度越快
dd if=/dev/zero of=/swapfile bs=1M count=1024
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,4.76434 秒,225 MB/秒
在按 ENTER 之前检查你的命令,因为如果你指出 of(代表输出文件)到错误的位置,这可能会破坏数据。
我们可以看到 1 千兆字节已经分配:
ls -lh /swapfile
-rw-r--r--. 1 root root 1.0G 2月 22 16:36 /swapfile
5. 启用交换文件
目前,我们的文件已创建,但我们的系统不知道这应该用于交换。我们需要告诉我们的系统将该文件格式化为交换,然后启用它。
在我们这样做之前,我们需要调整我们文件的权限,以便除 root 之外的任何人都无法读取它。允许其他用户读取或写入此文件将是一个巨大的安全风险。我们可以通过输入以下内容来锁定权限:
chmod 600 /swapfile
通过输入以下内容验证文件是否具有正确的权限:
ls -lh /swapfile
-rw-------. 1 root root 1.0G 2月 22 16:36 /swapfile
如你所见,只有 root 用户的列才能启用读取和写入标志。
现在我们的文件更安全了,我们可以通过键入以下命令来告诉我们的系统设置交换空间:
mkswap /swapfile
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=d945f99d-f025-4b62-adde-1ea635329bfd
我们的文件现在已准备好用作交换空间。我们可以输入以下命令来启用它
swapon /swapfile
我们可以通过检查我们的系统现在是否报告交换空间来验证过程是否成功:
swapon -s
文件名 类型 大小 已用 权限
/swapfile file 1048572 0 -1
我们在这里有一个新的交换文件。我们可以free
再次使用该实用程序来证实我们的发现:
free -m
total used free shared buff/cache available
Mem: 472 106 5 4 360 314
Swap: 1023 0 1023
我们的交换已成功建立,我们的操作系统将根据需要开始使用它。
6. 永久使交换文件
我们启用了我们的交换文件,但是当我们重新启动时,服务器不会自动启用该文件。我们可以通过修改fstab
文件来改变它。
vi /etc/fstab
在文件底部,你需要添加一行代码,告诉操作系统自动使用你创建的文件:
/swapfile none swap sw 0 0
完成后保存并关闭文件。
7. 调整你的交换设置
在处理交换时,可以配置几个选项,这些选项会影响系统的性能。
该swappiness
参数配置系统将数据从 RAM 交换到交换空间的频率。这是介于 0 和 100 之间的值,表示百分比。
如果值接近零,内核将不会将数据交换到磁盘,除非绝对必要。请记住,与交换文件的交互是昂贵的
,因为它们比与 RAM 的交互花费更多时间,并且可能导致性能的显着降低。告诉系统不要太依赖交换通常会使系统更快。
接近 100 的值将尝试将更多的数据放入交换中以努力保持更多的 RAM 空间。根据你的应用程序的内存配置文件或你使用的服务器,在某些情况下可能会更好。
通过输入以下内容我们可以看到当前的 swappiness 值:
cat /proc/sys/vm/swappiness
60
对于桌面,60 的 swappiness 设置并不是一个坏的值。对于 VPS 系统,我们可能希望将其移近 0。
我们可以使用该sysctl
命令将 swappiness 设置为不同的值。
例如,要将 swappiness 设置为 10,我们可以键入:
sysctl vm.swappiness=10
vm.swappiness = 10
该设置将持续到下一次重新启动。我们可以在重启时自动设置该值,方法是将该行添加到我们的 /etc/sysctl.conf 文件中:
vi /etc/sysctl.conf
在底部,你可以添加:
vm.swappiness=10
完成后保存并关闭文件。
你可能想要修改的另一个相关值是vfs_cache_pressure
。此设置配置系统将选择多少数据缓存 inode 和 dentry 信息。
基本上,这是访问有关文件系统的数据。这通常是非常昂贵的查找和频繁请求,所以对于你的系统来说缓存是一件很棒的事情。你可以通过 proc 再次查询文件系统来查看当前值:
cat /proc/sys/vm/vfs_cache_pressure
100
正如目前配置的那样,系统太快地从缓存中删除索引节点信息。通过输入以下内容,可以将其设置为更保守的设置,如 50:
sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50
这只对目前的 session 有效。我们可以通过将它添加到配置文件中来改变它,就像使用 swappiness 设置一样:
vi /etc/sysctl.conf
在底部,添加指定新值的行:
vm.vfs_cache_pressure = 50
完成后保存并关闭文件。
8. 结论
按照本指南中的步骤,将为你提供一些 Swap,以便使用 RAM。交换空间在避免一些常见问题方面非常有用。
如果遇到 OOM(内存不足)错误,或者如果发现系统无法使用所需的应用程序,则最佳解决方案是优化应用程序配置或升级服务器。然而,配置交换空间可以给你更多的灵活性。