我有一个用作 SAN 存储的 Linux 机器。它配备了 14 个 SATA HDD,它运行的唯一软件是 iscsi target 和 zabbix agent。这是物理机器,不是 VM。
安装的 RAM 大小为 128 GB,交换空间安排为 4 GB,当 RAM 很大时,没有人会关心它的大小,但随着盒子的运行(正常运行时间为 694 天),交换空间的使用越来越多,现在已使用约 80%。
htop 不会显示任何错误,看起来操作系统使用 RAM 作为缓存等。swappiness
设置为 10,然后设置为 1,没有任何帮助。当然我可以完全禁用交换,但看起来这将是一个糟糕的举动。
所以我的问题很简单,我怎样才能将盒子设置为使用 RAM 而不使用交换,以及为什么在 RAM 足够的情况下它却使用交换?
这是 SAN,因此它服务于块而不是文件,因此缓存可以在块基础上完成,并且如果 RAM 有限,可以轻松减少,无论如何它都不会影响 iSCSI 的逻辑。
Zabbix 说现在我有可用的 RAM = 123.22 GB(嘿,几乎全部 128 GB!),使用的交换空间是 4 GB 中的 3.24 GB。
答案1
没问题。即使还有可用的 RAM,Linux 内核也会将几乎从未使用的内存页移到交换空间中。
最好将暂时不活动的内存页面换出,将经常使用的数据保留在缓存中;这是内核所期望的情况。
vfs_cache_pressure
您可以使用(控制内核回收用于缓存目录和 inode 对象的内存的趋势)和swappiness
(控制内核交换内存页面的积极性:值越高积极性越高,值越低减少交换量)对此进行更多控制。
您可以在 中找到这些设置 /etc/sysctl.conf
。