【问题标题】:What is the meaning of running out of swap? [closed]用完swap是什么意思? [关闭]
【发布时间】:2015-10-29 11:28:19
【问题描述】:

在许多情况下,在 linux 机器中,我们可能会遇到错误 Running out of swap。这到底是什么意思。是不是类似于甩锅?空间不足和交换空间不足是相似的术语吗?我们如何才能找到修复这些类型的错误?

【问题讨论】:

  • 你究竟是从哪里得到这个错误的?

标签: linux ubuntu operating-system


【解决方案1】:

swap 是您的 RAM 的辅助(基于磁盘)存储:如果您的应用程序消耗过多内存,则 RAM 的某些部分换出(移动)到硬盘上, 为新的内存请求腾出空间。 (发生这种情况的假设是,在不久的将来不需要换出的内存;如果应用程序需要再次访问它,内存将再次换入(移回RAM),可能会首先触发 换出另一个内存区域)。

交换通常相当慢,因为它涉及在 RAM 和硬盘之间移动更大的数据块,并且所有应用程序都必须等到它完成才能继续。因此,这是一种避免内存不足崩溃的安全措施,但您应该尽量避免触发交换。

现在交换空间本身可以是一个文件或整个分区,但在任何情况下它们的大小也是有限的(由它们所在的分区大小定义,或由您的操作系统限制)。

所以如果你需要换出大量内存(或者交换空间很小),你迟早会用完交换

基本上有两种方法可以“解决”这个问题:

  • 让您的交换空间更大
  • 让您的应用程序消耗更少的内存

扩展交换空间

  • 首先,尝试为您的系统添加更多 RAM。您拥有的 RAM 越多,系统需要换出内存的可能性就越小。

如果这没有帮助(或不可能),您可能需要扩展实际可用的交换空间:

  • 首先使用mkswap 创建一个新的交换区(文件或磁盘分区)。
  • 然后启用交换空间,使用swapon
  • 您还可以通过在fstab 文件中添加一个条目来使更改持久化。

但实际上,这可能只会让您的“交换用完”问题稍后出现,所以请继续阅读:

减少内存消耗

当今的计算机具有大量 RAM。 除非您正在处理 非常大 的数据集或正在并行运行 非常多 需要大量内存的应用程序,否则您不太可能用完 RAM 和/或交换空间。

除非,也就是说,你的一个应用程序有一个memory leak 并且消耗了无限量的内存。

尝试找出哪些应用程序耗尽了所有内存,并检查它们是否在泄漏资源。

【讨论】:

  • 非常感谢您的解释。我也想知道如何找到我们是否用完了交换。任何可以使用的linux命令。 ?
  • @Bubbles cat /proc/meminfo | grep -i swap
【解决方案2】:

交换空间是磁盘上的一个区域,用于在进程移出内存时存储它们。在虚拟内存出现之前,这是为多个用户腾出空间的方法。

页面文件是磁盘上用于实现虚拟内存的区域。

交换 => 将整个进程移入和移出内存。 分页 => 将单个页面移入和移出内存。

有些系统同时使用交换文件和页面文件,但现在的趋势是只使用页面文件。

为了提高效率,页面文件需要是连续的,这在历史上的 unix 文件系统上是不可能的。许多 unix 变体使用磁盘分区而不是文件。这通常在 unix 领域称为“交换分区”,因为 Unix 最初在不支持虚拟内存的 PDP 上运行。因此,他们使用交换而不是分页,并且名称保留了下来。

swap 用完的问题取决于您是真正进行交换还是分页。在虚拟内存系统中,所有用户用户内存都必须映射到一个文件。通常这是可执行文件和页面文件的组合。可执行文件用于对静态内存(代码、数据)进行分页,而页面文件则对动态内存进行分页。因此,即使物理内存可用,页面文件的大小也是进程可以拥有的虚拟内存量的限制之一。虚拟内存要求所有内存页面都有一个磁盘空间。增加物理内存并不能解决页面空间不足的问题。

这些天您不太可能遇到交换系统。周围有一些页面文件和交换文件系统。在交换系统中,空间不足通常是运行太多作业的问题。您可以增加物理内存,但大多数交换系统支持 1、2、4,也许是 8 MB(不是 GB)。

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2014-04-03
    • 2013-05-16
    • 2011-04-03
    相关资源
    最近更新 更多