我想知道将 /proc/sys/vm/extfrag_threshold 设置为 1000 是否安全?更改此设置会产生什么后果?默认为 500。
将其设置为 1000 是否会本质上禁用内存压缩?这是否意味着内存不会随着时间的推移而进行碎片整理?
我遇到过这样的情况:内存压缩导致系统在内存不足的情况下挂起,将 extfrag_thres 设置为 1000 可停止挂起并提高性能。设置为 990 没有帮助,只有设置为 1000 有帮助。
答案1
是的,我确实认为这会完全禁用内存压缩,并且随着时间的推移,碎片可能会增加。也就是说,禁用该功能后,它仍然可以通过回收来释放 RAM。也就是说,释放磁盘缓存、交换(如果启用了交换)和取消映射可执行文件(下次运行该程序的特定部分时,它必须从磁盘上的可执行文件将其加载回来。)
不直观地(至少对我来说),这个值并不能真正表明内存的碎片程度;当区域的可用 RAM 足够低时,它只会趋向于 0,从而使压缩更有可能失败(如果已经有用于该大小内存分配的可用 RAM,则在 extfrag_threshold 术语中,其值为 -1.000 或 -1000)。禁用压缩可能会导致性能不佳(例如,如果您尝试使用磁盘,则磁盘缓存会反复删除),但我认为这不会导致内存不足的情况,除非整个事情确实用完了记忆。因此,如果它能让特定的工作负载运行得更好,那就去做吧。