为服务器添加交换空间是弥补内存不足错误的一个极佳选择。Linux 允许用户在系统内存满时在系统中添加交换空间。当您创建一个专用空间分区时,您将使物理内存能够顺利运行,而无需过多担心磁盘空间不足。
交换空间概述
Linux 中的交换空间是机器 虚拟内存 的一部分,在物理内存空间耗尽时使用。特别是在运行大型程序或应用程序而需要额外内存时,交换空间是保存临时非活动内存页的理想选择。创建交换空间允许用户在运行大型程序时存储数据,从而减少应用程序崩溃。这意味着,如果系统需要更多内存资源且内存已满,内存中的所有非活动页面都会被转移到交换空间,程序就能够不间断地运行。
我需要多少交换空间?
交换空间的大小取决于几个因素。其中包括可用内存、施加的负载以及系统是否需要支持休眠功能(挂起到磁盘)。请参考下表,根据内存中的可用空间检查推荐的交换空间:
|
序号 |
可用内存空间 |
推荐交换空间 |
|
1. |
1GB |
1GB |
|
2. |
2GB |
1GB |
|
3. |
3GB |
2GB |
|
4. |
4GB |
2GB |
|
5. |
5GB |
2GB |
|
6. |
6GB |
2GB |
|
7. |
8GB |
3GB |
在本教程中,我们将 引导您完成在 Ubuntu 20.04 上添加交换空间的步骤。让我们开始吧!
前提条件
要学习本教程,您需要:
- 安装了 Ubuntu 在您的系统上。
- 非 root 用户 账户设置,并在您的机器上具有 sudo 权限。
步骤 1:检查交换空间信息
交换空间的大小取决于系统的内存。因此,在创建交换空间之前,必须检查系统中是否有可用的交换空间。输入以下命令以检查系统是否配置了任何交换空间:
|
1 |
$ sudo swapon --show |
如果显示输出,则表示您的系统中有可用空间来创建交换空间。然而,没有输出则表示没有足够的可用空间来添加交换空间。
使用 free 工具来验证没有处于活动状态的交换空间:
|
1 |
$ free -h |
您将看到输出中交换空间行显示为空值:
步骤 2:检查硬盘分区可用性
与检查系统可用性类似,现在让我们检查当前的磁盘使用情况,以确保我们有足够的空间。使用 df 命令来检查硬盘分区的可用性:
|
1 |
df -h |
在 / 列中带有 Mounted on 的设备就是我们的磁盘,它有 11% 的空闲空间。您将看到输出:
在检查系统要求之后,让我们继续在文件系统上创建一个交换文件。
步骤 3:创建交换文件
要在我们的文件系统上创建交换文件,请分配一个文件名为 swapfile 在根 (/) 目录下,使用 fallocate 程序。分配文件大小取决于您的需求。为了使教程简单易懂,我们正在创建一个 1G 的文件并分配 1G 的内存。使用 sudo 命令来创建交换文件:
|
1 |
sudo fallocate -l 1G /swapfile |
接下来,输入此命令以验证保留的空间:
|
1 |
$ ls -lh /swapfile |
现在我们已经在系统中创建了交换空间,让我们在下一步中启用它。
步骤 4:启用交换文件
一旦我们有了合适的大小,就让我们将其转换为交换空间。出于安全原因,至关重要的是使我们的文件仅对 root 用户可访问,并防止普通用户访问。我们将添加限制,以便具有 root 权限的用户可以查看该文件并读取其内容。使用以下 root 命令使该文件仅对 root 用户可访问:
|
1 |
sudo chmod 600 /swapfile |
然后,使用 ls 命令来验证更改:
|
1 |
$ ls -lh /swapfile |
如您所见,只有 root 用户启用了读写标志:
之后,将该文件标记为交换空间:
|
1 |
sudo mkswap /swapfile |
您将看到输出:
之后,启用交换文件并允许我们的系统开始使用它:
|
1 |
sudo swapon /swapfile |
接下来,验证交换分区的可用性:
|
1 |
$ sudo swapon --show |
您将看到以下输出:
正如我们在 步骤 1 中所做的那样,我们将再次检查 free 工具的空间:
|
1 |
free -h |
您将看到以下输出:
我们的交换分区已成功设置,我们的操作系统将根据需要开始使用它。在下一步中,我们将使交换文件永久生效。
步骤 5:使交换文件永久生效
默认情况下,每当我们重启时,服务器不会自动保留交换设置。为了更改默认设置并确保安全,我们将把交换文件添加到我们的 /etc/fstab 文件中。使用 sudo 命令备份 /etc/fstab 文件:
|
1 |
sudo cp /etc/fstab /etc/fstab.bak |
接下来,通过输入以下内容将交换文件信息添加到 /etc/fstab 文件的末尾:
|
1 |
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab |
之后,让我们检查一些设置并进行修改,以便微调我们的交换空间。
步骤 6:修改交换设置
在这一步中,我们将配置设置并进行一些修改。让我们调整 swappiness 属性并更改缓存压力。
-
调整 Swappiness 属性
The swappiness 参数是一个可调的内核参数。它改变了交换出运行内存之间的平衡,并负责将数据从内存交换到交换空间的数据交换。该参数值以百分比表示,范围从 0 到 100。
The vm.swappiness 值对系统 swappiness 的行为有直接影响。较高的 vm.swappiness,系统进行交换的次数就越多,反之亦然。如果该值接近于零,内核将不会交换数据,这可能会导致性能下降。允许您的系统不怎么依赖交换分区是提高其性能并获得强劲响应能力的一种极佳方法。
或者, vm.swappiness 越接近 100,就越会尝试将更多数据放入交换分区,而减少在物理内存中的数据。与低到中等的 vm.swappiness 值不同,当有大量数据在内存中频繁换入换出时,高系统交换会产生非常不利的影响。
通过输入以下内容检查当前的 swappiness 值:
|
1 |
cat /proc/sys/vm/swappiness |
您将看到以下输出:
您还可以使用 sysctl 命令设置您选择的 swappiness。让我们通过输入以下内容将 swappiness 值设置为 15:
|
1 |
sudo sysctl vm.swappiness = 15 |
您将看到以下输出:
在系统重启之前,设置将保持原样。将该行添加到我们的 /etc/sysctl.conf 文件中,以便在重新启动/重启时自动设置该值:
|
1 |
sudo nano /etc/sysctl.conf |
您可以在底部添加以下代码:
|
1 |
Vm.swappiness = 15 |
然后,保存并关闭文件。
-
调整缓存压力
接下来,我们将修改 vfs_cache_pressure ,它将优先处理 inode 和 dentry 信息,而不是其他数据。这些 vfs_cache_pressure 设置 还控制内核回收用于缓存目录的内存的倾向。再次进入 proc 文件系统以检查当前值:
|
1 |
cat /proc/sys/vm/vfs_cache_pressure |
您将看到以下输出:
由于配置已经完成,我们的系统将从缓存中清除 inode 信息。让我们将 sysctl vm.vfs_cache_pressure 设置为更稳定的设置,如下所示:
|
1 |
sudo sysctl vm.vfs_cache_pressure = 60 |
您将看到以下输出:
类似于我们在 swappiness 设置中所做的,我们也可以在这里更改配置:
|
1 |
sudo nano /etc/sysctl.conf |
在底部,插入一行表示您创建的新值:
|
1 |
Vm.vfs_cache_pressure = 60 |
最后,保存并关闭文件。
结论
您可以将交换空间添加为专用的交换分区、交换文件或两者的组合。您可以创建交换空间并利用其优势来无缝运行应用程序,而无需过多担心内存不足警告。虽然在内存空间有限的系统中创建交换空间是一个额外的优势,但绝不能将其视为更多 RAM 空间的替代方案。请记住,交换空间位于硬盘上,因此与物理内存相比,您可能会遇到稍慢的访问时间。
这里有更多关于我们博客的教程,将帮助您开始使用 Ubuntu 服务器:
祝您计算愉快!










评论
暂无评论。发表第一条评论吧。