linux中添加swap(交换空间)

什么是交换

交换是硬盘上的一个区域,被指定为操作系统可以临时存储数据的地方,这些数据不能再保存在RAM中。基本上,这使您能够增加服务器在工作“内存”中保留的信息量,但有一些注意事项。主要是当RAM中没有足够的空间容纳正在使用的应用程序数据时,将使用硬盘驱动器上的交换空间。

写入磁盘的信息将比保存在RAM中的信息慢得多,但是操作系统更愿意将应用程序数据保存在内存中,并使用交换旧数据。总的来说,当系统的RAM耗尽时,将交换空间作为回落空间可能是一个很好的安全网,可防止非SSD存储系统出现内存不足的情况。

检查系统的交换信息

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

我们可以通过输入以下命令来查看系统是否有任何配置交换

如果您没有取回任何输出,这意味着您的系统当前没有可用的交换空间。

您可以使用free -h验证是否存在交换空间:

正如您在输出的“交换”行中看到的那样,系统上没有交换处于活动状态。

检查硬盘驱动器分区上的可用空间

为swap分配空间的最常见方式是使用专门用于该任务的单独分区。但是,改变分区方案并不总是可能的。我们可以轻松地创建驻留在现有分区上的交换文件。

在我们这样做之前,我们应该通过输入df -h命令:

下面的设备/dev是我们的磁盘在这种情况下。在这个例子中我们有足够的空间。您的使用情况可能会有所不同。

尽管对于交换空间的适当大小有许多意见,但这取决于您的个人偏好和应用程序要求。一般来说,相当于系统内存量的两倍或更多是一个很好的起点。另一个很好的经验是,如果你只是把它用作RAM备用,那么任何超过4G的交换可能是不必要的。

创建一个交换文件

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

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

由于本示例中的服务器具有512MB的RAM,因此我们将在本指南中创建一个1 GB的文件。调整这个以满足您自己的服务器的需求:

如果以上命令执行无效,尝试以下命令:

参数解读:

if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

bs=bytes:同时设置读入/输出的块大小为bytes个字节

count=blocks:仅拷贝blocks个块,块大小等于bs指定的字节数。

我们可以通过键入ls -lh /swapfile来验证是否保留了正确的空间量:

启用交换文件

现在我们有一个正确大小的文件,我们需要把它变成交换空间。

首先,我们需要锁定文件的权限,以便只有具有root权限的用户才能读取内容。这可以防止普通用户能够访问该文件,这将具有重大的安全隐患。

只能root通过键入以下文件来访问该文件:

输入ls -lh /swapfile验证权限是否更改:

正如你所看到的,只有root用户启用了读写标志。

现在我们可以通过键入sudo mkswap /swapfile将文件标记为交换空间:

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

我们可以通过输入sudo swapon --show验证交换是否可用:

我们可以使用free -h再次检查实用程序的输出来证实我们的发现:

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

使交换文件永久

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

/etc/fstab在发生任何错误的情况下备份文件:

您可以/etc/fstab通过输入以下命令将交换文件信息添加到文件末尾:

调整你的交换设置

在处理交换时,可以配置几个选项,这些选项会影响系统的性能。

调整Swappiness属性

该swappiness参数配置您的系统将数据从RAM交换到交换空间的频率。这是介于0和100之间的值,表示百分比。

如果值接近零,内核将不会将数据交换到磁盘,除非绝对必要。请记住,与交换文件的交互是“昂贵的”,因为它们花费的时间比与RAM的交互更长,并且会导致性能的显着下降。告诉系统不要依赖交换太多通常会使你的系统更快。

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

通过输入cat /proc/sys/vm/swappiness我们可以看到当前的swappiness值:

对于服务器,您可能希望将其移近0。我们可以使用该sysctl命令将swappiness设置为不同的值。例如,要将swappiness设置为10,我们可以输入:

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

调整缓存压力设置

你可能想要修改的另一个相关的值是vfs_cache_pressure。此设置配置系统将选择多少数据缓存inode和dentry信息。

基本上,这是访问有关文件系统的数据。这通常是非常昂贵的查询和频繁要求,所以这是一个很好的事情,让您的系统缓存。您可以通过proc再次查询文件系统来查看当前值:

Output 100 由于目前配置,我们的系统太快地从缓存中删除inode信息。我们可以通过输入以下内容将其设置为更保守的设置:

再一次,这只对我们目前的会话有效。我们可以通过将其添加到我们的配置文件来改变它,就像我们使用我们的swappiness设置一样:


参考:   How To Add Swap Space on Ubuntu 16.04

点赞
  1. 423说道:

    biubiubiu

    1. 居倩说道:

      猪倩倩

发表评论

电子邮件地址不会被公开。 必填项已用*标注