如果内存不足需要重新启动系统吗?

如果内存不足需要重新启动系统吗?

我需要通过 SSH 在远程计算机上运行一些内存密集型测试。上次我这样做时,计算机停止响应,需要有人物理重新启动它。

有没有办法可以设置它,以便在使用过多内存时系统重新启动而不是冻结? (我确实有 root 访问权限)。内核版本是4.9.0。

答案1

为了监视/恢复“不稳定”/饥饿服务器的控制,我建议使用硬件,或者使用软件看门狗;在 Debian 中你可以使用以下命令安装它:

sudo apt-get install watchdog

然后编辑/etc/watchdog.conf并添加阈值或测试;在我看来,看门狗也会被激活,如果内核在一段时间内没有看到它,它就会重新启动。例如,如果软件例程没有在固定时间内与/dev/watchdog0或类似的情况进行对话。

例如,您可以在以下位置定义负载阈值/etc/watchdog.conf

max-load-1             = 40
max-load-5             = 18
max-load-15            = 12

另请注意,某些主板/芯片组带有内置看门狗;如果我没记错的话,Arm A20 就是其中之一。

人看门狗

如果检测到严重问题,Linux 内核可以重置系统。这可以通过特殊的看门狗硬件来实现,或者通过内核中可靠性稍差的纯软件看门狗来实现。无论哪种方式,都需要有一个守护进程来告诉内核系统工作正常。如果守护进程停止执行此操作,系统将被重置。

watchdog 就是这样一个守护进程。它打开/dev/watchdog,并经常向其写入数据,以防止内核重置(至少每分钟一次)。每次写入都会将重新启动时间延迟一分钟。一分钟不活动后,看门狗硬件将导致重置。对于软件看门狗,重新启动的能力将取决于机器和中断的状态。

如果设备 /dev/watchdog 正确关闭,则可以停止看门狗守护程序而不会导致重新启动,除非您的内核是在启用 CONFIG_WATCHDOG_NOWAYOUT 选项的情况下编译的。

也可以看看Raspberry Pi 和 Arduino:使用看门狗定时器构建可靠的系统

答案2

要回答您的具体问题,您可以设置 sysctls,如下所示:

vm.panic_on_oom=1
kernel.panic=10

这样,如果系统内存不足,内核就会出现恐慌,然后在恐慌十秒后重新启动。

在完全支持 cgroups2 的新系统上,systemd-oomd 可能是一个不太激烈的选择。

相关内容