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

2023-11-04

介绍

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

什么是互换?

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

写入磁盘的信息将比保存在 RAM 中的信息慢得多,但操作系统更愿意将运行的应用程序数据保留在内存中,并对旧数据使用交换。总的来说,当系统 RAM 耗尽时,使用交换空间作为后备措施可以成为一个很好的安全网,防止在具有可用非 SSD 存储的系统上出现内存不足异常。

检查系统的掉期信息

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

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

  1. sudo swapon --show

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

您可以使用以下命令验证是否没有活动交换free公用事业:

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

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

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

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

在执行此操作之前,我们应该通过键入以下内容来检查当前的磁盘使用情况:

  1. df -h
Output
Filesystem 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,因此我们将在本指南中创建一个 1GB 文件。调整此以满足您自己的服务器的需求:

  1. sudo fallocate -l 1G /swapfile

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

  1. ls -lh/交换文件
  1. -rw-r--r--1根根1.0G Apr 25 11:14 /交换文件

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

启用交换文件

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

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

使文件只能访问root通过输入:

  1. sudo chmod 600/交换文件

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

  1. ls -lh/交换文件
Output
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

正如您所看到的,只有 root 用户启用了读取和写入标志。

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

  1. sudo mkswap/交换文件
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

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

  1. sudo swapon/交换文件

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

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

我们可以检查输出free再次验证我们的发现:

  1. 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 file.

备份/etc/fstab文件以防出现问题:

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

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

  1. echo '/swapfile 无交换 sw 0 0' | sudo tee -a/etc/fstab

调整您的交换设置

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

调整 Swappiness 属性

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

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

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

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

  1. cat/proc/sys/vm/swappiness
Output
60

对于台式机来说,swappiness 设置为 60 并不是一个坏值。对于服务器,您可能希望将其移近 0。

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

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

  1. sudo sysctl 虚拟机交换性=10
Output
vm.swappiness = 10

此设置将持续到下次重新启动为止。我们可以通过将行添加到我们的重新启动时自动设置此值/etc/sysctl.conf file:

  1. sudo nano/etc/sysctl.conf

在底部,您可以添加:

/etc/sysctl.conf
vm.swappiness=10

完成后保存并关闭文件。

调整缓存压力设置

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

基本上,这是有关文件系统的访问数据。通常,查找成本非常高并且请求非常频繁,因此对于系统来说,缓存是一件非常好的事情。您可以通过查询来查看当前值proc再次文件系统:

  1. cat/proc/sys/vm/vfs_cache_压
Output
100

根据当前配置,我们的系统从缓存中删除索引节点信息的速度太快。我们可以通过键入以下内容将其设置为更保守的设置,例如 50:

  1. sudo sysctl vm.vfs_cache_压=50
Output
vm.vfs_cache_pressure = 50

再次强调,这仅对我们当前的会话有效。我们可以通过将其添加到我们的配置文件中来更改它,就像我们对交换设置所做的那样:

  1. sudo nano/etc/sysctl.conf

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

/etc/sysctl.conf
vm.vfs_cache_pressure=50

完成后保存并关闭文件。

结论

遵循本指南中的步骤将为您提供一些喘息空间,以防出现内存不足异常。交换空间对于避免其中一些常见问题非常有用。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 16.04 上添加交换空间 的相关文章

随机推荐

  • Android布局-LinearLayout、RelativeLayout

    在本教程中 我们将概述 Android 布局 我们还将探索一些可用于组织屏幕内容的特定布局控件 即 Android LinearLayout 和 AndroidrelativeLayout 安卓布局 用户界面的基本构建块是View从 Vie
  • Python 文件操作 - 使用 Python 读取和写入文件

    在本教程中 我们将研究 Python 中的不同文件操作 我们将介绍如何使用 Python 读取文件 写入文件 删除文件等等 所以 事不宜迟 让我们开始吧 在 Python 中处理文件 在之前的教程中 我们使用了控制台接受输入 现在 我们将使
  • 如何在 JavaScript 中编写条件语句

    介绍 在编程中 很多时候您会希望根据用户输入或其他因素运行不同的代码块 例如 如果每个字段都正确填写 您可能希望提交表单 但如果缺少某些必填字段 您可能希望阻止该表单提交 为了完成这样的任务 我们有条件语句 它们是所有编程语言的组成部分 条
  • 如何在 CentOS 7 上使用 Apache 作为带有 mod_proxy 的反向代理

    介绍 A 反向代理是一种代理服务器 它接受 HTTP S 请求并将其透明地分发到一个或多个后端服务器 反向代理非常有用 因为许多现代 Web 应用程序使用后端应用程序服务器处理传入的 HTTP 请求 这些服务器并不意味着用户可以直接访问 并
  • 如何在 Ubuntu 16.04 上安装和配置 Elasticsearch

    介绍 弹性搜索是一个实时分布式搜索和分析数据的平台 它的流行是由于它的易用性 强大的功能和可扩展性 Elasticsearch 支持 RESTful 操作 这意味着您可以将 HTTP 方法 GET POST PUT DELETE 等 与 H
  • 如何在 CentOS 7 上使用 Let's Encrypt 保护 Apache

    介绍 让我们加密是一个证书颁发机构 CA 为以下用户提供免费证书传输层安全 TLS 加密 从而在 Web 服务器上启用加密的 HTTPS 它通过提供可自动执行大部分步骤的软件客户端 简化了证书的创建 验证 签名 安装和续订过程 Certbo
  • 如何在 Ubuntu 12.04 LTS(精确穿山甲)上安装 nginx

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • R 中的 head() 和 tail() 函数 - 详细参考

    The R 中的 head 和 tail 函数通常用于读取数据集的前 n 行和后 n 行 您可能是一名在职专业人员 程序员或新手 但有时您需要阅读大型数据集并对其进行分析 消化一个拥有 20 多列甚至更多列 数千行的庞大数据集确实很困难 本
  • NoSQL 数据库管理系统和模型的比较

    介绍 当大多数人想到数据库时 他们通常会想到传统的关系数据库模型 其中涉及由行和列组成的表 虽然关系数据库管理系统仍然处理互联网上的大部分数据 但近年来 随着开发人员寻求解决关系模型局限性的方法 替代数据模型变得更加普遍 这些非关系数据库模
  • 理解 JavaScript 中的类

    介绍 JavaScript 是一种基于原型的语言 JavaScript 中的每个对象都有一个隐藏的内部属性 称为 Prototype 可用于扩展对象属性和方法 您可以在我们的文章中阅读有关原型的更多信息了解 JavaScript 中的原型和
  • 如何在角度测试中使用 Spies

    介绍 茉莉花间谍用于跟踪或存根函数或方法 间谍是一种检查函数是否被调用或提供自定义返回值的方法 我们可以使用间谍来测试依赖于服务的组件 并避免实际调用服务的方法来获取值 这有助于使我们的单元测试专注于测试组件本身的内部而不是其依赖项 在本文
  • Java 棘手面试问题

    不久前我写过一篇文章前 50 个 Java 编程问题 我们的读者非常喜欢它 所以今天我们将研究一些 Java 面试中棘手的问题 Java 棘手面试问题 这些都是编程问题 但除非您对 Java 有深入的了解 否则很难猜测输出并解释它 1 Nu
  • 了解 JavaScript 中的原型和继承

    介绍 JavaScript 是一个基于原型的语言 这意味着对象属性和方法可以通过具有克隆和扩展能力的通用对象来共享 这称为原型继承 与类继承不同 在流行的面向对象编程语言中 JavaScript 相对独特 因为 PHP Python 和 J
  • 如何在 Python 3 中使用列表方法

    介绍 Python 3 有许多内置数据结构 包括列表 数据结构为我们提供了一种组织和存储数据的方法 我们可以使用内置方法来检索或操作该数据 为了充分利用本教程 您应该熟悉列表数据类型 其语法及其索引方式 您可以通过阅读教程来查看列表理解 P
  • Mockito 教程

    Mockito 是一个基于 java 的模拟框架 与其他测试框架结合使用 例如JUnit and TestNG 它内部使用Java反射API 并允许创建服务对象 模拟对象返回虚拟数据并避免外部依赖 它通过模拟外部依赖项并将模拟应用到被测代码
  • Linux 中的存储术语和概念简介

    介绍 Linux 拥有强大的系统和工具来管理硬件设备 包括存储驱动器 在本文中 我们将从高层次上介绍 Linux 如何表示这些设备以及如何将原始存储转化为服务器上的可用空间 什么是块存储 块存储是 Linux 内核中块设备的另一个名称 A块
  • JPA EntityManager - Hibernate EntityManager

    JPA EntityManager 是 Java Persistence API 的核心 休眠是使用最广泛的 JPA 实现 JPA实体管理器 程序最重要的方面之一是与数据库的连接 数据库连接和与数据库的事务被认为是最昂贵的事务 ORM 在这
  • Apache Spark 示例:Java 中的字数统计程序

    阿帕奇火花 Apache Spark 是一个开源数据处理框架 可以在分布式环境中对大数据执行分析操作 这是加州大学伯克利分校的一个学术项目 最初由加州大学伯克利分校 AMPLab 的 Matei Zaharia 于 2009 年启动 Apa
  • 如何配置 NTP 以在 Ubuntu 16.04 上的 NTP 池项目中使用

    介绍 准确的计时对于几乎所有服务或软件都至关重要 电子邮件 记录器 事件系统和调度程序 用户身份验证机制以及在分布式平台上运行的服务都需要准确的时间戳来按时间顺序记录事件 这些服务使用网络时间协议 NTP 将系统时钟与可信的外部源同步 该源
  • 如何在 Ubuntu 16.04 上添加交换空间

    介绍 提高服务器响应能力和防止应用程序内存不足错误的最简单方法之一是添加一些交换空间 在本指南中 我们将介绍如何将交换文件添加到 Ubuntu 16 04 服务器 什么是互换 Swap是硬盘驱动器上的一个区域 被指定为操作系统可以临时存储