专栏首页云计算教程系列如何在Ubuntu 16.04上添加交换空间
原创

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

介绍

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

警告

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

什么是交换?

交换是硬盘驱动器上的一个区域,它被指定为操作系统可以临时存储无法再保存在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的量是一个很好的起点。另一个好的经验法则是,如果您只是将其用作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

输出结果如下所示:

-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参数配置表示系统将数据从RAM交换到交换空间的频率。这是介于0和100之间的值,表示百分比。

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

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

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

cat /proc/sys/vm/swappiness

输出:

60

对于桌面,swappiness设置为60并不是一个糟糕的值。对于服务器,您可能希望将其移近0。

我们可以使用该sysctl命令将swappiness设置为不同的值。

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

sudo sysctl vm.swappiness=10

输出:

vm.swappiness = 10

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

sudo nano /etc/sysctl.conf

在底部,您可以添加:

vm.swappiness=10

完成后保存并关闭文件。

调整缓存压力设置

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

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

cat /proc/sys/vm/vfs_cache_pressure

输出:

100

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

sudo sysctl vm.vfs_cache_pressure=50

输出:

vm.vfs_cache_pressure = 50

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

sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure=50

完成后保存并关闭文件。

结论

按照本指南中的步骤将为您提供一些缓存空间,否则会导致内存不足异常。交换空间在避免一些常见问题方面非常有用。

如果遇到OOM(内存不足)错误,或者如果发现系统无法使用所需的应用程序,最佳解决方案是优化应用程序配置或升级服务器。为了尽可能避免出现内存不足错误,我们建议您购买腾讯云服务器,您可以使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

想要了解更多关于Swap Space等开源信息教程,请前往腾讯云+社区学习更多知识。

参考文献:《How To Add Swap Space on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在CentOS上用Caddy安装WordPress

    WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中...

    独钓寒江雪_Ly
  • 如何保护PostgreSQL免受攻击

    服务器刚搭建,流量少,没有任何对黑客有价值的东西,你可能就会忽视相关的安全问题。但是,许多漏洞攻击都是自动化的,专门用于查找你服务中的BUG。这些服务器主要目的...

    独钓寒江雪_Ly
  • 如何在Debian 8上设置Apache虚拟主机

    Apache Web服务器是在互联网上提供Web内容的最流行方式。它占互联网上所有活跃网站的一半以上,并且非常强大和灵活。

    独钓寒江雪_Ly
  • 北上广深上班路谁最苦?腾讯发布出行半径大数据报告

    北上广深通勤路上谁最辛苦? 有哪些你不知道的出行特征? 大数据对四城的交通规划、商业布局给出哪些提示? “互联网+”和共享经济改变了人与服务连接的方式,改变了...

    腾讯位置服务
  • 【推荐阅读】六大关键词,解读互联网大数据

    导读:人人都快把大数据当做口头禅,但“知其然而不知其所以然”者甚多,甚至有很多人把大数据与数据库之间划等号。在信息技术飞速发展的移动互联网时代,究竟该如何理解大...

    钱塘数据
  • 分析Oracle数据库日志文件(1)

    分析Oracle数据库日志文件(1) 一、如何分析即LogMiner解释 从目前来看,分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMin...

    阿新
  • 1.2 CAPM

    beta本质是资产收益和市场收益的关系,一单位市场超额收益的变化(Rm-Rf),会导致资产收益变化多少

    rocket
  • 【揭秘】47万微信群和2亿微信用户背后的数字规律

    导读 这是一篇来自清华大学、康奈尔大学、腾讯公司和香港科技大学的研究人员采用“机器学习算法”,分析了47万+微信群、2亿+微信用户、6亿+好友关系和200万+邀...

    灯塔大数据
  • 揭秘47万微信群和2亿微信用户背后的数字规律

    微信群已经进入到我们的日常生活中,成为社交关系的主要纽带。但微信群有自己的规律,长期群能存活很长的时间,临时群则转瞬即逝。来自清华大学、康奈尔大学、腾讯公司和香...

    华章科技

扫码关注云+社区

领取腾讯云代金券