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的一些相关知识。
就像名字所暗示的那样,它表示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的一些相关知识。
相关文章推荐
- linux中非root用户使用wireshark进行抓包
- centos 服务器安全设置
- 更改printk打印级别
- 简单的Linux系统故障的处理思路
- Linux下nmon监控系统资源
- Linux-定时器创建
- Linux下 JNI的使用
- Linux安装配置JDK
- linux基础
- Linux-获取进程管理
- linux中实现动态火炉
- Linux-内核模块编程
- linux删除主ip,从ip自动被删除
- Kali Linux 新手折腾笔记
- LINUX下一款不错的网站压力测试工具webbench
- Linux-简单的Makefile编写
- linux升级OpenSSL
- Linux 下smi/mdio总线通信
- Linux内核分析8:理解进程调度时机、进程调度、进程切换
- Linux中查看系统资源占用情况的命令【转载】