几天前,我将内核的 swappiness 从 60 更改为 30。
我有问题。在启动时,我看到错误(仅在 Windows 中;据我所知,Unity 和 X.org 仍然可以正常工作)表明程序已崩溃并报告它,并且“检测到系统问题”或类似的东西,或者“Ubuntu 14.04 遇到内部错误”。
我该如何解决这个问题而不必将我的 swappiness 提高到 60,或者我不能以其他方式解决它?这些问题是 bug 还是当你改变 swappiness 时会发生什么?
几天前,我将内核的 swappiness 从 60 更改为 30。
我有问题。在启动时,我看到错误(仅在 Windows 中;据我所知,Unity 和 X.org 仍然可以正常工作)表明程序已崩溃并报告它,并且“检测到系统问题”或类似的东西,或者“Ubuntu 14.04 遇到内部错误”。
我该如何解决这个问题而不必将我的 swappiness 提高到 60,或者我不能以其他方式解决它?这些问题是 bug 还是当你改变 swappiness 时会发生什么?
我将在这里进行猜测,将 OP 的评论视为理所当然,即可以通过改
swappiness
回 60 来恢复问题。Linux 内核通常会过度使用内存可用性。如果您 reduce
swappiness
,则告诉它在较小程度上使用程序所需的 RAM 交换空间,以平衡将 RAM 用于缓存文件数据。如果您设置swappiness
为 0,则您请求您的交换空间根本不应该被使用。然而,即使 a
swappiness
为 0,一旦 Linux 内核估计它接近“内存不足”状态,它也会改变它的行为。在此之前,它不会在 RAM 中缓存任何文件数据。但是一旦它发现内存不足,它就会改变其策略并使用任何可用的交换区域,而不考虑swappiness
设置(除非某些特殊条件适用)。您报告说您在引导过程中看到了这种现象。这是许多进程并行启动、开始分析它们的配置、按需分配内存等的情况。
虽然
swappiness
从60
tp30
更改不会更改执行的总空间,但它可能会更改内核报告可用的内存量。或者它可以更改有关确定 OOM 条件的时间点的行为。因此,如果您碰巧只有足够的 RAM 并交换要启动的所有内容,那么当内核从过度报告过渡到实际提供内存时,或者当它开始相信一个错误时,您看到的效果可能是一种不幸的行为记忆状况的可能性越来越大。例如,代码
vmscan.c
(负责释放 RAM 中的内存)将根据如此剧烈的条件变化突然改变其行为。