手动触发 swappiness?

手动触发 swappiness?

我正在 Proxmox 上使用 ZFS,并注意到 swappiness 似乎从未启动。swappiness 值当前设置为 50,但除非我达到 100% 的 RAM 使用率,否则永远不会交换,就好像 swappiness 设置为 0 一样。

我如何手动强制运行 swappiness?目前我能做到这一点的唯一方法是安装类似https://github.com/julman99/eatmemory消耗系统内存超过 100%

猫/proc/meminfo

MemTotal:       528099208 kB
MemFree:        33819676 kB
MemAvailable:   30995036 kB
Buffers:           65056 kB
Cached:           368868 kB
SwapCached:      4978016 kB
Active:         383870632 kB
Inactive:       71255296 kB
Active(anon):   383654260 kB
Inactive(anon): 71140760 kB
Active(file):     216372 kB
Inactive(file):   114536 kB
Unevictable:      160824 kB
Mlocked:          160824 kB
SwapTotal:      1875374420 kB
SwapFree:       1576041808 kB
Dirty:               128 kB
Writeback:             0 kB
AnonPages:      450155280 kB
Mapped:           185764 kB
Shmem:             92400 kB
KReclaimable:    1316628 kB
Slab:            7796824 kB
SReclaimable:    1316628 kB
SUnreclaim:      6480196 kB
KernelStack:       49616 kB
PageTables:      1746424 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    2139350296 kB
Committed_AS:   1255929500 kB
VmallocTotal:   34359738367 kB
VmallocUsed:     6192420 kB
VmallocChunk:          0 kB
Percpu:          1302144 kB
HardwareCorrupted:     0 kB
AnonHugePages:  176281600 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:      72
HugePages_Free:       72
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:          147456 kB
DirectMap4k:    49376056 kB
DirectMap2M:    406616064 kB
DirectMap1G:    81788928 kB

答案1

swappiness 不会强制使用交换空间。也不会解决内存不足的问题。

较高的值交换性鼓励回收匿名页面,而不仅仅是页面缓存。但这对 Linux 上的 ZFS 没什么帮助,因为不使用 Linux 的页面缓存

我基本上希望总是有一定数量的可用 RAM。... 另外,我的系统当前使用 230/256GB 的 RAM,尚未使用交换。... 如果我在 RAM 为 99% 时创建另一个虚拟机,它将无法启动。

进行一些容量规划以避免内存超额认购。不要使用魔法命令来告诉虚拟机管理程序保留可用内存,而要严格遵守不要启动超出资源容量的客户机的规定。

您的 230/256GB 已使用 90%,如果使用率过高,可能会造成内存压力,不利于性能。这可能需要限制客户机内存,即 56 x 4 GB 客户机,以凑足一些数字。剩下的几十 GB 是否足以运行虚拟机管理程序内核并且仍有一些储备,您可以在测试中发现。

编辑:从 meminfo 来看,您的 500 GB 主机面临一些内存压力并且正在进行交换。

  • MemAvailable 占总量的 5.8%,比较低。在 500 GB 的主机上使用 29 GB 并不是很多。
  • SwapTotal 减去 SwapFree 显示交换空间使用量为 285 GB。总交换空间为 1788 GB 意味着它不会很快用完。请记住,大多数持久性存储比 DRAM 慢几个数量级。
  • 0.4 GB 的缓存绝对值相当低。这与 Linux 上的 ZFS 使用一致,后者不使用通常的 Linux VFS 页面缓存。因此,swappiness 可调参数在此环境中几乎不起作用。如果您手动删除缓存,请不要这样做,这可能会损害性能。

交换是在需要时一次一组页面进行的。当客户机内存需求较低时,主机不会突然释放整个 100 GB 客户机。那将非常昂贵。

我对内存超额认购持怀疑态度,尤其是内存膨胀,并且不推荐这样做。鼓励使用低内存可能会对性能造成风险,因为在最坏的情况下,回收会导致延迟,并可能激怒 OOM 杀手。看看你尝试以高利用率启动客户机,超过某个点,内核就不会授予内存分配。

在启动 100 GB 的客户机之前,确认主机有 > 100 GB 的可用 RAM(不包括交换空间)。在减少客户机的内存大小之前,请先关闭客户机。不超额订购会导致内存成本更高,但性能更稳定,并且更易于维护。

相关内容