Swappiness 变化导致问题

Swappiness 变化导致问题

几天前,我将内核的 swappiness 从 60 改为 30。

我遇到了问题。启动时,我看到错误(仅在 Windows 中;据我所知 Unity 和 X.org 仍能正常工作),提示程序崩溃并报告,并显示“检测到系统问题”或类似信息,或“Ubuntu 14.04 遇到内部错误”。

我该如何解决这个问题,而不必将交换率提高到 60,或者我不能用其他方法解决这个问题?这些问题是 bug 还是当你改变交换率时会发生这种情况?

答案1

swappiness我会在这里进行猜测,理所当然地认为 OP 的评论可以通过改回 60 来解决问题。

Linux 内核通常会过度使用内存。如果减少swappiness,则表示它较少地将交换空间用于程序所需的 RAM,与将 RAM 用于缓存文件数据相平衡。如果设置swappiness为 0,则表示您要求根本不使用交换空间。

但是,即使 a 为swappiness0,Linux 内核也会在估计接近“内存不足”情况时改变其行为。在此之前,它不会在 RAM 中缓存任何文件数据。但是,一旦它发现内存不足,它就会改变策略并使用任何可用的交换区域,而不管设置如何swappiness(除非存在某些特殊情况)。

您报告说您在启动过程中看到了这种现象。这种情况是许多进程并行启动、开始分析其配置、按需分配内存等。

虽然swappiness60tp更改30不会改变执行的总空间,但也许会改变内核报告的可用内存量。或者它可以改变确定 OOM 条件时的行为。

因此,如果您恰好只有刚好足够的 RAM 和交换空间来运行所有即将启动的程序,那么当内核从过度报告转变为实际提供内存时,或者当它开始认为内存不足的情况越来越有可能时,您看到的效果可能是一种令人遗憾的行为。编码vmscan.c例如(负责释放 RAM 中的内存)将根据条件的剧烈变化突然改变其行为。

相关内容