自 Ubuntu 19.04 起,提取文件或将某些内容复制到外部存储时使用交换区域

自 Ubuntu 19.04 起,提取文件或将某些内容复制到外部存储时使用交换区域

在 Ubuntu 19.04 中,交换区域的使用出现了意外行为。提取文件或将文件复制到外部存储时,操作系统开始使用交换区域,并且在执行该任务后不会释放它。这会降低复制到外部驱动器的速度,从长远来看可能会损坏硬盘驱动器。

我该如何阻止操作系统的这种行为?注意:从 Ubuntu 19.04 开始就出现了这种情况。现在我在 19.10 上,问题仍然存在。

初始内存分配:

              total        used        free      shared  buff/cache   available
Mem:           7861         900        5727         154        1233        6538
Swap:          1952           0        1952

执行某些文件操作后的内存分配:

              total        used        free      shared  buff/cache   available
Mem:           7861        1448         146         239        6265        5871
Swap:          1952          38        1914

答案1

交换用于将recently unused, but active内存页面调出。这通常在使用率较高时发生。

如果你看一下free -h命令输出,在文件复制操作之后,buff/cache 从 1233 变为 6265,用作文件缓冲区/缓存... 而且由于只有 8G RAM,所以必须将一些内容调出到交换区,如您所见,RAM 使用量从 900 增加到了 1448,而交换区使用量从 0 增加到了 38。

绝对正常。

现代 SSD 使用磨损均衡来防止过早“老化”。交换仅在 RAM 使用量大的情况下使用。

答案2

经过一些文件操作后,38MiB 被写入交换区。这是没有什么。可能是某些软件没有主动运行,只是占用内存。忽略它。这是正常的。

内核决定,非运行应用程序占用的内存最好用来缓存文件,而不是保存该应用程序,因为该应用程序处于非活动状态。这可能是真的。

一般来说,只要您有空闲内存来运行您想要的任何软件,并且交换量很少,就不必担心交换使用问题。您有足够的空闲内存。让内核为您处理交换。

答案3

我偶然发现了一篇有关交换的文章,它与您的问题有关。我在这里发布链接作为答案,而不是评论,因为使用或不使用交换在 Linux 中仍然是一个备受争议的话题。

https://haydenjames.io/linux-performance-almost-always-add-swap-space/

本文最重要的几点是:

  • 即使仍有可用的 RAM,Linux 内核也会将几乎从未使用的内存页面移到交换空间中。
  • 最好换出一段时间不活动的内存页面,将经常使用的数据保存在缓存中,这应该在服务器最空闲时发生,这是内核的目标。
  • 如果交换空间设置得太大会导致性能问题、中断或响应时间延长(没有适当的监控/警报),请避免这样做。

文章结尾处提到了两个内核参数swappinessvfs_cache_pressure如果您对当前的交换行为仍然不满意,您可能需要尝试一下。


另一个很好的参考是: https://help.ubuntu.com/community/SwapFaq

相关内容