Linux 在安装了大量 RAM 时进行交换

Kev*_*n M 14 linux memory iscsi storage-area-network swap

我有一个用作 SAN 存储的 linux 盒子。它配备了 14 个 SATA HDD,它运行的唯一软件是 iSCSI 目标和 zabbix 代理。这是物理盒子,不是虚拟机。

安装的 RAM 大小为 128 GB,swap 被安排为 4 GB,当 RAM 很大时没有人关心它的大小,但是随着机器运行(正常运行时间为 694 天)swap 越来越多地使用,现在它用于~80%。

htop 不会显示任何不好的东西,看起来操作系统使用 RAM 作为缓存等swappiness设置为 10,然后设置为 1,没有任何帮助。当然我可以完全禁用交换,但看起来这将是一个糟糕的举动。

所以我的问题很简单,如何将盒子设置为使用 RAM 而不是使用交换,以及为什么它在 RAM 足够的情况下完全使用交换?

这是 SAN,所以它服务的是块而不是文件,所以缓存可以基于块来完成,如果 RAM 有限,可以轻松减少,无论如何它不会影响 iSCSI 的逻辑。

Zabbix 说现在我有可用的 RAM = 123.22 GB(嘿,几乎都是 128 GB!),使用的交换是 3.24 GB 的 4 GB。

Ove*_*ind 23

没有问题。即使还有可用的 RAM,Linux 内核也会将几乎从未使用过的内存页移动到交换空间中。

最好将一段时间不活动的内存页换出,将经常使用的数据保留在缓存中;这是内核所需的情况。

您可以通过使用vfs_cache_pressure(它控制内核回收用于缓存目录和 inode 对象的内存的趋势) 和swappiness(它控制内核交换内存页面的积极性:更高的值将增加积极性)对此有更多的控制,较低的值会减少交换量)。

您可以在 中找到这些设置 /etc/sysctl.conf

  • 详细说明:有些东西保存在 RAM 中,但很少或从未使用过。想想 `cron`,或者其他一些守护进程的初始化部分。我宁愿让它们交换,为活动作业释放一些内存页,而不是使用 RAM 本身。换出不会立即将它们从 RAM 中删除;这只是意味着内核可以在感觉其他东西更好地用于 RAM 时删除它们。因此,只要 RAM 充足,交换一些页面就不会受到伤害;当 RAM 变得稀缺时,交换页面会有所帮助。 (11认同)
  • @AlexeyKamenskiy 这在很大程度上取决于交换量。如果交换是“一次性”操作,则交换本身不会降低主机性能。如果必须不断地换入和换出相同的页面,就会降低性能。 (7认同)
  • @Spc_555 我认为该问题对“机会主义交换”的定义与此处需要的定义不同。这个问题问的是当系统什么都不做时是否可以换出页面。显然,他们不能。但是这个问题询问匿名(非文件支持)页面是否可以换出,以便为磁盘缓存腾出更多空间。显然他们可以。 (5认同)
  • -1:这个答案主要是基于神话。当可用 RAM 超过大约 3% 时,Linux 不应该使用交换(对于具有大量 RAM 的系统,甚至更少)。更多相关信息:https://unix.stackexchange.com/questions/533739/does-linux-perform-opportunistic-swapping-or-is-it-a-myth/ (4认同)
  • @Spc_555 如果这是真的,那么为什么永远的历史上每个主要的 Linux 发行版都像这个答案所描述的那样行事?他们*全部*开箱即用吗? (4认同)
  • @AlexeyKamenskiy Swapping 只会降低性能,当程序因为需要 RAM 而等待操作时,程序正在等待操作因为它需要从交换页面读取的页面,或者其他进程正在等待同一设备上的 IO。在没有紧急内存压力的情况下将swap写入空闲磁盘,完全不影响系统性能。 (2认同)