当物理 RAM 填满时,我的系统就会停止运行。问题是我有一个交换分区,并且交换量设置为 60,但交换量几乎没有被使用。
$ cat /proc/sys/vm/swappiness
60
$ free
total used free shared buff/cache available
Mem: 16316280 12921308 160164 1131864 3234808 1942056
Swap: 16666108 399872 16266236
如您所见,我已接近内存不足的危险程度,大约为 80%。我编译了一些源代码,它达到了 98%,我的系统开始严重卡顿,但我能够在它达到 100% 之前将其关闭。过去,如果我让它继续运行并达到 100%,我的系统就会完全锁定,即使放置数小时也无法恢复;触发 OOM 的神奇 SysRq 键没有任何作用。
与我看到的其他问题(抱怨根本没有使用交换)不同,我的系统正在使用交换,但用量不多,从未超过 3%,结果是我的系统变慢或挂起,因为物理内存已满。当物理 RAM 接近 100% 时,会有几百 MB 被交换,但仅此而已,然后系统就会锁定。
理想情况下,在达到上限之前进行交换可以缓解这种情况。我尝试将交换量设置为 100,但效果不大:即使我的物理 RAM 达到 99%,交换使用率也达到 4%
我的解决方法是假装我没有任何交换并每隔几天杀死 Chromium,因为它会慢慢消耗掉 GB 的内存,并且不可否认,无论如何这可能是一件好事,但这只是掩盖了我的交换空间没有得到最佳利用的事实。
我现在要关闭 Chromium,以便完成构建。大约需要一周的时间才能再次消耗这么多内存,所以如果有人有任何建议,我到时候都可以尝试。