操作系统: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
已经提到的,有些情况是无法恢复的。但重新启动许多情况至少比坚持要好全部其中。;)