硬件冻结时重新启动

硬件冻结时重新启动

操作系统:Ubuntu 桌面 12.04

我如何确保即使内核出现非常低级别的大规模故障,系统也能重新启动?或者,如果这不可能,那么可以实现的最佳冻结到重新启动覆盖率是什么?

有什么方法可以利用基于硬件的计时器或中断来强制重启吗?

我更喜欢可以在通用且廉价的硬件上运行的解决方案。

附加问题:您会推荐其作为库存/默认解决方案吗?

进一步说明:

假设我遇到了似乎非常低级别的冻结。(甚至连神奇的 SysRq 键都不起作用)

我也无法通过 ssh 进入机器,但看起来 TCP 握手成功了。(奇怪?是不是仪表故障了,对吧?)

这可能是由于内存不足或过热造成的,但目前我不太关心直接原因,而是更关心如何最大限度地延长短期正常运行时间。(尽管我完全承认,了解原因是防止其长期发生的最佳方法)

研究:

我目前正在调查此事:http://www.cyberciti.biz/tips/reboot-linux-box-after-a-kernel-panic.html然而,由于没有视觉指标,我并不确信我是否真的陷入恐慌。

这似乎就是我想要的:http://manpages.ubuntu.com/manpages/hardy/man8/watchdog.8.html但是它似乎依赖于/dev/watchdog我的系统似乎没有的。我是不是漏掉了什么?

如果我按照这里的检查:http://pic.dhe.ibm.com/infocenter/lnxinfo/v3r0m0/index.jsp?topic=%2Fliaai.crashdump%2Fliaaicrashdumpnmiwatch.htm看来 NMI 在我的系统上正在运行,但它没有在发生故障时重新启动系统。我在这里遗漏了什么?

谢谢

答案1

如果您的机器没有配备硬件看门狗,仍有几种基于软件的内核机制可以为您服务。首先,有一个名为的软件看门狗实现softdog,可以watchdog像真正的硬件看门狗一样使用。您可以通过测试是否加载内核模块来测试您的内核是否支持软件看门狗modprobe softdog。这也会给你/dev/watchdog。如果您的内核不提供支持,softdog您必须构建自己的内核并启用CONFIG_SOFT_WATCHDOG

config SOFT_WATCHDOG
     tristate "Software watchdog"
     select WATCHDOG_CORE
     help
       A software monitoring watchdog. This will fail to reboot your system
       from some situations that the hardware watchdog will recover
       from. Equally it's a lot cheaper to install.

       To compile this driver as a module, choose M here: the
       module will be called softdog.

内核提供的另一种机制是悬挂检查计时器,通过以下选项启用CONFIG_HANGCHECK_TIMER

config HANGCHECK_TIMER
     tristate "Hangcheck timer"
     depends on X86 || IA64 || PPC64 || S390
     help
       The hangcheck-timer module detects when the system has gone
       out to lunch past a certain margin.  It can reboot the system
       or merely print a warning.

另外(至少在 x86 上)还有NMI 锁定检测器作为挂起时自动重新启动系统的第三种机制:

config LOCKUP_DETECTOR
     bool "Detect Hard and Soft Lockups"
     depends on DEBUG_KERNEL && !S390
     help
       Say Y here to enable the kernel to act as a watchdog to detect
       hard and soft lockups.

       Softlockups are bugs that cause the kernel to loop in kernel
       mode for more than 20 seconds, without giving other tasks a
       chance to run.  The current stack trace is displayed upon
       detection and the system will stay locked up.

       Hardlockups are bugs that cause the CPU to loop in kernel mode
       for more than 10 seconds, without letting other interrupts have a
       chance to run.  The current stack trace is displayed upon detection
       and the system will stay locked up.

       The overhead should be minimal.  A periodic hrtimer runs to
       generate interrupts and kick the watchdog task every 4 seconds.
       An NMI is generated every 10 seconds or so to check for hardlockups.

       The frequency of hrtimer and NMI events and the soft and hard lockup
       thresholds can be controlled through the sysctl watchdog_thresh.

config HARDLOCKUP_DETECTOR
     def_bool y
     depends on LOCKUP_DETECTOR && !HAVE_NMI_WATCHDOG
     depends on PERF_EVENTS && HAVE_PERF_EVENTS_NMI

不要害怕对的依赖DEBUG_KERNEL,因为这在大多数发行版内核上都是启用的。

笔记:由于所有这些都是软件机制,因此无法保证它们能够检测到全部锁定。正如帮助文本SOFT_WATCHDOG已经提到的,有些情况是无法恢复的。但重新启动许多情况至少比坚持要好全部其中。;)

相关内容