如何添加交换空间在Ubuntu 16.04

介绍

提高服务器响应能力和防止应用程序发生内存不足错误的最简单方法之一是添加一些交换空间。 在本指南中,我们将介绍如何向Ubuntu 16.04服务器添加交换文件。

警告

尽管交换通常被推荐用于使用传统旋转硬盘驱动器的系统,但是使用SSD交换可能导致硬件随时间的退化问题。 由于这一考虑,我们不建议在DigitalOcean或任何其他使用SSD存储的提供商上启用交换。 这样做会影响您和您的邻居的底层硬件的可靠性。 本指南仅供在其他地方使用旋转磁盘系统的用户参考。

如果您需要提高DigitalOcean上服务器的性能,我们建议您升级您的Droplet。 这将导致一般更好的结果,并将降低可能影响您的服务的硬件问题的可能性。

什么是交换?

交换是已经被指定为其中操作系统可暂时存储数据,它可以在RAM中不再保持的地点的硬盘驱动器上的区域。 基本上,这使您能够增加服务器可以在其工作“内存”中保留的信息量,并带有一些注意事项。 硬盘驱动器上的交换空间将主要用于RAM中不再有足够的空间来保存使用中的应用程序数据。

写入磁盘的信息将明显慢于RAM中保存的信息,但操作系统将更喜欢在内存中保持运行应用程序数据,并对旧数据使用交换。 总的来说,当系统的RAM耗尽时,交换空间作为回退可以是针对非SSD存储可用的系统上的内存异常的良好安全网。

检查系统的交换信息

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

我们可以通过键入以下内容查看系统是否有任何配置的交换:

sudo swapon --show

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

您可以验证是否有使用没有主动调剂free实用工具:

free -h
Output              total        used        free      shared  buff/cache   available
Mem:           488M         36M        104M        652K        348M        426M
Swap:            0B          0B          0B

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

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

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

在我们这样做之前,我们应该通过键入以下内容检查当前磁盘使用情况:

df -h
OutputFilesystem      Size  Used Avail Use% Mounted on
udev            238M     0  238M   0% /dev
tmpfs            49M  624K   49M   2% /run
/dev/vda1        20G  1.1G   18G   6% /
tmpfs           245M     0  245M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           245M     0  245M   0% /sys/fs/cgroup
tmpfs            49M     0   49M   0% /run/user/1001

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

虽然对于交换空间的适当大小有很多意见,但它实际上取决于您的个人偏好和您的应用程序要求。 一般来说,等于或者是系统上的RAM的两倍的数量是一个很好的起点。 另一个好的经验法则是,如果你只是使用它作为一个内存回退,任何超过4G的交换可能是不必要的。

创建交换文件

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

创建一个交换文件的最佳方式是与fallocate程序。 此命令会立即创建一个预分配大小的文件。

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

sudo fallocate -l 1G /swapfile

我们可以通过键入以下内容来验证是否保留了正确的空间量:

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

我们的文件是用正确的空间量创建的。

启用交换文件

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

首先,我们需要锁定文件的权限,以便只有与用户root权限的用户可以读取其中的内容。 这将阻止正常用户访问该文件,这将有重大的安全隐患。

使只有访问的文件root键入:

sudo chmod 600 /swapfile

键入以下内容验证权限更改:

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

如您所见,只有root用户启用了读写标志。

我们现在可以通过键入以下命令将文件标记为交换空间:

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

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

sudo swapon /swapfile

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

sudo swapon --show
OutputNAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -1

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

free -h
Output              total        used        free      shared  buff/cache   available
Mem:           488M         37M         96M        652K        354M        425M
Swap:          1.0G          0B        1.0G

我们的互换已成功设置,我们的操作系统将开始使用它的必要。

使交换文件永久

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

备份/etc/fstab的情况下,文件有什么差错:

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

您可以交换文件的信息添加到您的末尾/etc/fstab键入文件:

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

调整您的交换设置

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

调整Swappiness属性

swappiness参数配置系统的频率进行数据交换出内存的交换空间。 这是介于0和100之间的值,表示一个百分比。

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

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

我们可以通过键入以下内容查看当前的swappiness值:

cat /proc/sys/vm/swappiness
Output60

对于桌面,swappiness设置为60不是一个坏的值。 对于服务器,您可能需要将其移动到更接近0。

我们可以通过设置swappiness为不同的值sysctl命令。

例如,要将swappiness设置为10,我们可以键入:

sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10

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

sudo nano /etc/sysctl.conf

在底部,您可以添加:

/etc/sysctl.conf
vm.swappiness=10

保存并在完成后关闭文件。

调整缓存压力设置

另一个相关的价值,你可能需要修改的是vfs_cache_pressure 此设置配置系统选择将高速缓存i节点和dentry信息与其他数据相比的多少。

基本上,这是访问文件系统的数据。 这通常是非常昂贵的查找和非常频繁地请求,所以它是一个伟大的事情,你的系统缓存。 您可以通过查询看到当前值proc再次文件系统:

cat /proc/sys/vm/vfs_cache_pressure
Output100

由于它当前配置,我们的系统从缓存中快速删除inode信息。 我们可以通过键入以下内容将其设置为更保守的设置(如50):

sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50

同样,这只适用于我们当前的会话。 我们可以通过将其添加到我们的配置文件中来改变它,就像我们使用swappiness设置一样:

sudo nano /etc/sysctl.conf

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

/etc/sysctl.conf
vm.vfs_cache_pressure=50

保存并在完成后关闭文件。

结论

按照本指南中的步骤将给你一些Wheezy的空间,否则会导致内存不足的异常。 交换空间可以非常有用的避免一些这些常见的问题。

如果您正在运行OOM(内存不足)错误,或者您发现系统无法使用所需的应用程序,最佳解决方案是优化应用程序配置或升级服务器。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏