您的位置:首页 > 运维架构 > Linux

Linux kernel panic学习笔记

2016-04-15 14:12 302 查看
什么是kernel panic   

就像名字所暗示的那样,它表示Linux kernel走到了一个不知道该怎么走下一步的状况,一旦到这个情况,kernel就尽可能把它此时能获取的全部信息都打印出来,至于能打印出多少信息,那就看是那种情况导致它panic了。  

有两种主要类型kernel panic:  

1.hard panic(也就是Aieee信息输出)  2.soft panic (也就是Oops信息输出)  

什么能导致kernel panic   

只有加载到内核空间的驱动模块才能直接导致kernel panic,你可以在系统正常的情况下,使用lsmod查看当前系统加载了哪些模块。 

除此之外,内建在内核里的组件(比如memory map等)也能导致panic。  

因为hard panic和soft panic本质上不同,因此我们分别讨论。  

如何排查hard panic  

一般出现下面的情况,就认为是发生了kernel panic: 机器彻底被锁定,不能使用 

数字键(Num Lock),大写锁定键(Caps Lock),滚动锁定键(Scroll Lock)不停闪烁。 

如果在终端下,应该可以看到内核dump出来的信息(包括一段”Aieee”信息或者”Oops”信息) 

和Windows蓝屏相似  

原因:  

对于hard panic而言,最大的可能性是驱动模块的中断处理(interrupt handler)导致的,一般是因为驱动模块在中断处理程序中访问一个空指针(null pointre)。一旦发生这种情况,驱动模块就无法处理新的中断请求,最终导致系统崩溃。  

信息收集 

根据panic的状态不同,内核将记录所有在系统锁定之前的信息。因为kenrel panic是一种很严重的错误,不能确定系统能记录多少信息,下面是一些需要收集的关键信息,他们非常重要,因此尽可能收集全,当然如果系统启动的时候就 kernel panic,那就无法只知道能收集到多少有用的信息了。 

/var/log/messages: 幸运的时候,整个kernel panic栈跟踪信息都能记录在这里。 应用程序/库日志: 可能可以从这些日志信息里能看到发生panic之前发生了什么。 其他发生panic之前的信息,或者知道如何重现panic那一刻的状态 

终端屏幕dump信息,一般OS被锁定后,复制,粘贴肯定是没戏了,因此这类信息,你可

       var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);    

以需要借助数码相机或者原始的纸笔工具了。  

如果kernel dump信息既没有在/var/log/message里,也没有在屏幕上,那么尝试下面的方法来获取(当然是在还没有死机的情况下): 

如果在图形界面,切换到终端界面,dump信息是不会出现在图形界面的,甚至都不会在图形模式下的虚拟终端里。 

确保屏幕不黑屏,可以使用下面的几个方法: setterm -blank 0 

setterm -powerdown 0 setvesablank off 

从终端,拷贝屏幕信息(方法见上)  

完整栈跟踪信息的排查方法  

栈跟踪信息(stack trace)是排查kernel panic最重要的信息,该信息如果在/var/log/messages日志里当然最好,因为可以看到全部的信息,如果仅仅只是在屏幕上,那么最上面的信息可能因为滚屏消失了,只剩下栈跟踪信息的一部分。如果你有一个完整栈跟踪信息的话,那么就可能根据这些充分的信息来定位panic的根本原因。要确认是否有一个足够的栈跟踪信息,你只要查找包含”EIP”的一行,它显示了是什么函数和模块调用时导致panic。  

本周主要是跟着超铭叔上次讲的思路学习一下Linux的一些相关知识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: