在 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 内核也会将几乎从未使用的内存页面移到交换空间中。
- 最好换出一段时间不活动的内存页面,将经常使用的数据保存在缓存中,这应该在服务器最空闲时发生,这是内核的目标。
- 如果交换空间设置得太大会导致性能问题、中断或响应时间延长(没有适当的监控/警报),请避免这样做。
文章结尾处提到了两个内核参数swappiness
,vfs_cache_pressure
如果您对当前的交换行为仍然不满意,您可能需要尝试一下。
另一个很好的参考是: https://help.ubuntu.com/community/SwapFaq