如何创建和启用交换文件 Linux 领域 Line

交换文件被使用 Linux 当进程内存不足时。 该进程将被允许使用磁盘的一部分,而不是阻塞,这明显更慢,但可以防止可能损害服务可用性的意外内存不足崩溃。

什么是交换文件?

让我们从一个反问开始:当您的计算机内存不足时会发生什么?

在 Linux 上,一个特殊的监控进程,即 OOM 监控器/刮板进程,将监控系统是否内存不足,除非 OOM 刮板已被禁用或配置不同。

发生这种情况时,此进程将终止系统上运行的进程之一以释放内存。 这可能会导致痛苦的结果,例如数据损坏或服务不可用。 首字母缩略词 OOM 代表“内存不足”。

一种解决方案是购买额外的内存或减少计算机或服务器上同时运行的程序或服务的数量。 但是,如果我们可以将一些(通常便宜的)磁盘空间用作“额外内存”呢?

这正是交换文件的本质和作用:在您的存储设备上创建的特殊文件,然后成为主内存的一部分。 不是直接的,有处理开销,而是间接的,对处理速度有相当大的影响。

交换文件的优缺点

与较慢的磁盘相比,主内存通常快如闪电。 即使是 SSD(固态驱动器)也几乎总是比高速主存储芯片慢。 对于 HDD(传统、旋转、机械硬盘驱动器),速度差异要高得多。

因此,在大多数配置中,使用较慢的磁盘(SDD,尤其是 HDD)作为内存源是一个明显的优势。 在主存和磁盘之间来回写入数据的延迟(即使用磁盘作为内存)称为“交换”(交换内存与磁盘空间)

也就是说,在您的系统上有一个合理的交换端文件总是一个好主意。 原因很简单; 假设我们只需要额外的 1 GB 内存持续几分钟,以确保我们的系统不会调用 OOM 杀手并杀死某些进程。 在这种情况下交换文件更好,因为即使一个进程用完了可用的 RAM,它也不会崩溃,它只会运行得慢一点,直到它完成它的任务。

但是,如果系统开始发生很大变化,它几乎肯定会变慢(阅读:慢得多)。 这将非常明显。

简而言之,有一种微妙而微妙的平衡,这种平衡有些随意,取决于给定情况下的许多不同事物; 系统上运行的进程数及其工作内存大小、使用的总内存、交换文件中的可用内存、特定系统交换文件设置等。

关于交换文件的一些注意事项

在许多 Linux 在当今世界的配置中,系统中的一个驱动器上分配了一个交换分区。 这是一个特殊的区域,通常(但不限于;可以稍后添加)在安装 Linux 操作系统。 它具有与交换文件相同的目标功能。 要检查您的系统当前是否启用了任何形式的共享,只需在您的终端中运行以下命令:

sudo apt -y install htop
htop

并找到以下输出:

注意这个系统上有 62.7G 的主内存和 11.0G 的交换空间。 您还可以看到当前仅使用了少量 (23.5M)。 如果您怀疑您的系统正在被交换,请检查这两个计数器的外观。

如果两者都快满了,很可能是您的系统进行了大量交换并且运行速度明显变慢。 原因是现在有一个大的 I/O 限制负载(即磁盘绑定),不断地与基于磁盘的内存交换主内存。

作为一般的经验法则,有些人更喜欢使用一定百分比的系统内存作为分配给交换文件的大小。 我个人采取了另一条路线,那就是考虑我可能需要多少额外的内存。 如果尺寸相当大,对于 example 对于特定用例,8 GB 的服务器最终可能会使用 14 GB,因此将服务器内存从 8 GB 增加到 16 GB 更有意义。

但是,如果系统是 8 GB,典型使用量是 6-7 GB,如果我一次启动太多程序偶尔会出现峰值,我可能会考虑额外的 8 GB 交换空间,或者更多。 磁盘空间通常很便宜,所以稍微加大一点,只要您有空间,就不会受到伤害。

如何启用交换文件

准备好添加交换文件了吗? 这可以在旅途中完成。 这种方法对两者都有效 Debian (UbuntuMint,…)以及基于 RedHat 的系统(RedHat,Centos,…)。

我们将在此创建一个 1 GB,或 1000 兆字节,或 1024000 块(计算为兆字节数 x 1024)的交换文件 example.

我们称它为 swapfile123,位于根 (/) 目录中,我们给它起这个名字是为了避免覆盖它所在位置已有的任何文件。 如果您确定没有名为 /swapfile 的文件,您可以根据需要使用它,注意在所有地方正确重命名该文件。

请务必键入任何命令,尤其是 dd 命令,注意不要覆盖系统上的任何数据。 我们用 sudo su 通过以下方式进入超级用户(su)模式 sudo. 这很像运行每个命令使用 sudo虽然不写每一个更容易 sudo 像这样使用命令前缀。

sudo su
if [ -r /swapfile123 ]; then echo "Stop please! /swapfile123 already exists!"; fi
dd if=/dev/zero of=/swapfile123 bs=1024 count=1024000
chmod 0600 /swapfile123
mkswap /swapfile123
swapon /swapfile123

您应该看到类似于以下内容的输出:

如果是这样,恭喜! 您刚刚在 Linux 命令行!

首先我们使用 dd 工具来创建我们的交流空间,使用 /dev/zero 设备(一个虚拟设备,在调用时只输出零,例如 dd 或任何其他工具)。 接下来,我们设置一些适当的安全权限。

然后我们告诉操作系统该文件将使用 mkswap 领域。 最后,我们在命令行上动态启用交换空间,而无需重新启动我们的系统。

我们还可以轻松地检查我们的交换空间是否变大了使用 free -m:

很酷,当我们禁用新创建的交换文件时,您可以看到我们如何从 12215M 变为 11215M(预期为 -1000M)。 您还可以看到我们如何使用 swapoff 在命令行上动态禁用交换。

很高兴知道如果我们发现我们的系统有内存问题,并且我们可以写得足够快,我们可以在运行时给它额外的内存:) 实际上,最好在问题发生之前预先做这件事。

现在我们只需要解决一个小问题。 如果我们此时重新启动,而我们的交换文件将保留在磁盘上,系统将不会使用它。 到目前为止尚未进行任何配置更改,这将确保在系统重启时重新加载交换。

在启动时启用我们的新交换

要在启动时启用新的交换空间,只需将以下行(作为行)添加到 /etc/fstab:

/swapfile123  swap  swap  defaults  0  0

你可以在你还在的时候做 sudo su 模式(由领导指示 #) 启动 /etc/fstab 的 nano 编辑器:

nano /etc/fstab
cat /etc/fstab

然后只需将上面的行添加到文件末尾并保存 (CTRL+X > Y > enter)。 不要修改或删除任何其他行,因为这可能会导致您的系统无法再正确启动。 还要确保在通过运行重新启动之前仔细检查 /etc/fstab 文件的内容 cat /etc/fstab 多于。

您现在可以重新启动系统并确认您的额外交换空间仍然可用 free -m 再次。

删除我们的新空间交换

如果您想删除新的交换空间,或者创建一个稍大的交换空间,您可以通过首先编辑 /etc/fstab 文件并删除完全加载交换文件的行来实现。 不要修改或删除任何其他行,因为这可能会导致您的系统不再正确启动! 然后你可以运行:

sudo swapoff /swapfile123
rm /swapfile123

一切准备就绪! 也无需重新启动,因为此更改是动态进行的。 在下次重新启动时,交换文件将不再被激活,因为我们从 /etc/fstab 文件中删除了匹配的行。

享受交换文件!