如何在 Ubuntu 16.04 上添加交换空间

简介

要提高服务器的响应速度并防止应用程序出现内存不足错误,最简单的方法之一就是添加一些交换空间。 在本指南中,我们将介绍如何为 Ubuntu 16.04 服务器添加交换文件。

什么是交换?

Swap 是硬盘上的一个区域,被指定为操作系统临时存储 RAM 中无法再保存的数据的地方。 基本上,交换空间可以增加服务器工作 "内存 "中的信息量,但也有一些注意事项。 硬盘上的交换空间主要用于 RAM 空间不足以保存使用中的应用程序数据时。

写入磁盘的信息比保存在内存中的信息要慢得多,但操作系统更愿意将运行中的应用程序数据保存在内存中,而使用交换空间来保存较旧的数据。 总的来说,在使用非固态盘存储的系统上,交换空间作为系统内存耗尽时的备用空间,可以很好地防止内存不足的异常情况。

检查系统的交换信息

在开始之前,我们可以检查系统是否已经有一些可用的交换空间。 有可能存在多个交换文件或交换分区,但通常一个就足够了。

我们可以通过键入 "swap "查看系统是否配置了交换机:

1sudo swapon --show

如果没有任何输出结果,说明系统目前没有可用的交换空间。

您可以使用 free 工具验证是否存在活动交换:

1free -h
1[secondary_label Output]
2              total used free shared buff/cache available
3Mem:           488M 36M 104M 652K 348M 426M
4Swap:            0B 0B 0B

从输出结果的 "交换 "行可以看到,系统上没有激活交换。

检查硬盘分区的可用空间

为交换分配空间的最常见方法是使用专门用于该任务的独立分区。 不过,改变分区方案并非总是可行。 我们可以很容易地在现有分区上创建一个交换文件。

在此之前,我们应该输入

1df -h
1[secondary_label Output]
2Filesystem Size Used Avail Use% Mounted on
3udev 238M 0 238M 0% /dev
4tmpfs 49M 624K 49M 2% /run
5/dev/vda1 20G 1.1G 18G 6% /
6tmpfs 245M 0 245M 0% /dev/shm
7tmpfs 5.0M 0 5.0M 0% /run/lock
8tmpfs 245M 0 245M 0% /sys/fs/cgroup
9tmpfs 49M 0 49M 0% /run/user/1001

本例中,"/dev "下的设备就是我们的磁盘。 在本例中,我们有足够的可用空间(仅使用了 1.1G)。 你的使用情况可能会有所不同。

虽然关于交换空间的适当大小众说纷纭,但这确实取决于你的个人喜好和应用程序要求。 一般来说,与系统内存容量相等或两倍是一个不错的起点。 另一个好的经验法则是,如果你只是将交换空间用作内存的备用空间,那么超过 4G 的交换空间可能就没有必要了。

创建交换文件

既然知道了可用硬盘空间,我们就可以在文件系统中创建交换文件了。 我们将在根目录(/)下创建一个我们想要的交换大小的文件,名为 "swapfile"。

创建交换文件的最佳方法是使用 "fallocate "程序。 该命令会立即创建一个预分配大小的文件。

由于示例中的服务器内存为 512MB,我们将在本指南中创建一个 1GB 的文件。 请根据自己服务器的需要进行调整:

1sudo fallocate -l 1G /swapfile

我们可以通过键入来验证是否预留了正确的空间:

1ls -lh /swapfile
1-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

我们的文件已创建,并预留了正确的空间。

启用交换文件

现在,我们有了一个大小正确的文件,我们需要将其转化为交换空间。

首先,我们需要锁定文件的权限,只有拥有 root 权限的用户才能读取文件内容。 这样,普通用户就无法访问该文件,因为这将产生重大安全隐患。

键入 "root",使文件只能被 "root "访问:

1sudo chmod 600 /swapfile

输入验证权限更改:

1ls -lh /swapfile
1[secondary_label Output]
2-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

可以看到,只有 root 用户启用了读写标志。

现在,我们可以输入

1sudo mkswap /swapfile
1[secondary_label Output]
2Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
3no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

标记文件后,我们就可以启用交换文件,让系统开始使用它:

1sudo swapon /swapfile

我们可以通过键入验证交换是否可用:

1sudo swapon --show
1[secondary_label Output]
2NAME TYPE SIZE USED PRIO
3/swapfile file 1024M 0B   -1

我们可以再次检查 free 工具的输出,以证实我们的发现:

1free -h
1[secondary_label Output]
2              total used free shared buff/cache available
3Mem:           488M 37M 96M 652K 354M 425M
4Swap:          1.0G 0B 1.0G

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

将交换文件永久化

我们最近的更改启用了当前会话的交换文件。 不过,如果我们重新启动,服务器将不会自动保留交换设置。 我们可以通过在 /etc/fstab 文件中添加 swap 文件来改变这种情况。

备份 /etc/fstab 文件,以防出错:

1sudo cp /etc/fstab /etc/fstab.bak

您可以通过键入以下内容,将交换文件信息添加到 /etc/fstab 文件末尾:

1echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

调整你的交换设置

在处理交换时,您可以配置一些对系统性能有影响的选项。

调整交换属性

交换度 "参数用于配置系统将数据从 RAM 交换到交换空间的频率。 该值介于 0 和 100 之间,代表一个百分比。

当值接近零时,除非绝对必要,内核不会将数据交换到磁盘上。 请记住,与交换文件的交互是 "昂贵 "的,因为它们比与 RAM 的交互耗时更长,而且会导致性能显著下降。 告诉系统不要过多依赖交换文件,通常会让系统运行得更快。

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

我们可以通过键入"...... "来查看当前的交换度值:

1cat /proc/sys/vm/swappiness
1[secondary_label Output]
260

对于台式机来说,交换性设置为 60 也不错。 对于服务器,你可能希望将其接近于 0。

我们可以使用 sysctl 命令将交换度设置为不同的值。

例如,要将交换度设置为 10,我们可以键入

1sudo sysctl vm.swappiness=10
1[secondary_label Output]
2vm.swappiness = 10

该设置将持续到下次重启。 我们可以在/etc/sysctl.conf文件中添加这一行,在重启时自动设置该值:

1sudo nano /etc/sysctl.conf

在底部,您可以添加

1[label /etc/sysctl.conf]
2vm.swappiness=10

完成后保存并关闭文件。

调整缓存压力设置

你可能想修改的另一个相关值是 vfs_cache_pressure。 该设置用于配置系统在多大程度上选择缓存 inode 和 dentry 信息而不是其他数据。

基本上,这是有关文件系统的访问数据。 一般来说,这些数据的查询成本很高,而且请求频率也很高,因此是系统缓存的最佳内容。 你可以通过再次查询 proc 文件系统来查看当前值:

1cat /proc/sys/vm/vfs_cache_pressure
1[secondary_label Output]
2100

按照目前的配置,我们的系统从缓存中删除 inode 信息的速度太快。 我们可以将其设置为更保守的值,比如 50,只需键入

1sudo sysctl vm.vfs_cache_pressure=50
1[secondary_label Output]
2vm.vfs_cache_pressure = 50

同样,这只对当前会话有效。 我们可以将其添加到配置文件中进行更改,就像交换性设置一样:

1sudo nano /etc/sysctl.conf

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

1[label /etc/sysctl.conf]
2vm.vfs_cache_pressure=50

完成后保存并关闭文件。

结论

按照本指南中的步骤操作,可以在出现内存不足异常时给你一些喘息的机会。 交换空间在避免某些常见问题方面非常有用。

如果您遇到 OOM(内存不足)错误,或者发现系统无法使用所需的应用程序,最好的解决办法是优化应用程序配置或升级服务器。

Published At
Categories with 技术
comments powered by Disqus