我在 FreeBSD 10.3-RELEASE 服务器上遇到过一些内核页面错误(致命陷阱 12)。它们发生在从几毫秒的正常运行时间到几天的正常运行时间的任何地方。当前进程总是不同的(pagedaemon、pkg、find)。
在线阅读后,答案似乎指向硬件故障。我的问题是,故障硬件究竟如何在内核级页面错误中表现出来?为什么硬件故障不会导致内核恐慌并提供更多描述性信息?
更新:根据下面鲍勃的帖子,我执行了硬件测试。我的内存条很糟糕。我用 memtest 来确定这一点。
答案1
内核恐慌要么是软件检测到的错误,要么是内核代码中出现并被内核检测到的某种硬件陷阱。内核可以做的唯一安全的事情就是恐慌(即自愿停止)。这可能是由坏内存引起的,这会导致内核将坏内存内容作为代码执行,或者坏内存会导致内核获取坏数据,从而导致某些错误或检测到的不一致。
内核级页面错误也是由错误的内核数据引起的;内核尝试访问不存在的页面,可能是因为它使用了从内存中获取的错误地址。在这种情况下,内核只知道它使用了一个错误的地址;人们可以使用调试器追踪代码以获取其如何开始的线索,但在遇到多种原因之前您不会回溯太远。
结果是,如果出现内核级页面错误,您所能做的就是测试硬件!