Technorati 标签: Kernel Panic

出现原因

1. Linux在中断处理程序中,它不处于任何一个进程上下文,如果使用可能睡眠的函数,则系统调度会被破坏,导致kernel panic。因此,在中断处理程序中,是不能使用有可能导致睡眠的函数(例如信号量等)。

在中断发起的软中断中,其上下文环境有可能是中断上下文,同理,也不能调用可能导致睡眠的函数。软中断执行时,全局中断是打开的,而中断程序执行时,全局中断是禁止的。

软中断除了系统调度进入点,当软中断数量频繁时,内核中有一个专门的软中断的后台程序daemon来处理其事务。

2. 内核堆栈溢出,或者指针异常访问时,会出现kernel panic。

堆栈溢出:程序循环或者多层嵌套的深度过多时,可能会导致栈溢出。参考Linux的内存模型

3. 除0异常、内存访问越界、缓冲区溢出等错误时,当这些事件发生在应用程序时,Linux内核的异常处理机制可以对这些由应用程序引起的情况予以处理。当应用程序出现不可恢复性错误时,Linux内核可以仅仅终止产生错误的应用程序,而不影响其他程序。

如果上述操作发生在内核空间,就会引起kernel panic。

4. 内核陷入死锁状态,自旋锁有嵌套使用的情况。

5. 在内核线程中,存在死循环的操作。

解决方法

1. 全部排查内核中可能造成睡眠的函数调用地方。如果是自己写的模块,则在调用睡眠函数之前打印出特征日志,以备查验。

在内核代码中的特定位置加入printk调试调用,直接把需要关心的信息打印到屏幕上,从而得知程序执行的路径。

2. 在可疑的地方,调用dump_stack()函数或者__backtrace(),打印当前CPU的堆栈调用函数。

3. 打开Linux内核的崩溃转储机制(kdump机制,生产vmcore文件),当系统crash时,将内存内容保存到磁盘,或者通过网络发送到故障服务器,或者直接使用内核调试器。crash工具用于调试内核崩溃转储文件。

5. 使用内核自带的 notify_chain机制。Linux内核提供“通知链”功能,并预定义了一个内核崩溃通知链。当kernel panic时,异常处理程序会沿着预定义的通知链顺序调用注册到通知链中的通知函数。

6. 在RedHat、StackOverflow、查找出现bug的历史解决方案,

8. 对于一些未定义指令的错误,在出现的错误log中 ,Oops - undefined instruction: 0 [#1] PREEMPT SMP ARM,结合原始镜像的system.map文件,来定位。参考链接:Linux kernel crash analysis

9. systemtap调试工具

10. gcore工具

-------------------------------2014-08-08分界线------------------------------------------------

在学习Linux中,从《LInux内核设计与实现》里面,看到一本《Linux 内核精髓:精通Linux内核必会的75个绝技》,这本书是日本人高桥浩和写的,在书籍的合住作者,大岩尚宏,他编写了《Debug Hack》一书,这本是有关Linux内核调试的书籍,大喜。真是按图索骥,逐渐发现新的宝贝书籍。

内核调试工具介绍以及使用

Kdb

kdb是Linux内核的补丁,提供了一种在系统运行时,对内核内存和数据结构进行检查的方法,不是源码级别的调试工具。kdb主要目标在于开发和诊断一些内核的问题。

打开KALLSYMS:General setup-->Configure standard kernel features-->Load all symblos for debugging/ksymoops

开启kdb服务

Kprobe

kprobe(内核探测,kernel probe)是一个动态地收集调试和性能信息的工具,如:收集寄存器和全局数据结构等调试信息,无需对Linux内核频繁编译和启动。用户可以在任何内核代码地址进行陷阱,指定调试断点触发时的处理例程。工作机制是:用户指定一个探测点,并把用户定义的处理函数关联到该探测点,当内核执行到该探测点时,相应的关联函数被执行,然后继续执行正常的代码路径。

Kprobes 提供了一个强行进入任何内核例程并从中断处理器无干扰地收集信息的接口

Kprobes 向运行的内核中给定地址写入断点指令,插入一个探测器。执行被探测的指令会导致断点错误。Kprobes 钩住(hook in)断点处理器并收集调试信息。Kprobes 甚至可以单步执行被探测的指令。

内核探测分为kprobe, jprobe和kretprobe(也称return probe,返回探测)三种。

kprobe可插入内核中任何指令处;

jprobe插入内核函数入口,方便于访问函数的参数;

return probe用于探测指定函数的返回值。

内核配置

CONFIG_KPROBES                  General Setup--->Kprobe

CONFIG_MODULES                  √

CONFIG_MODULE_UNLOAD   √

CONFIG_KALLSYMS_ALL                   General Setup--->Configure standard kernel configuration-->Include all symbols in kallsyms

CONFIG_KALLSYMS                           General Setup--->Configure standard kernel configuration-->Load all symbols for debugging/ksymoops

CONFIG_KALLSYMS_EXTRA_PASS    General setup-->Configure standard kernel features-->Load all symbols for debugging/ksymoops

CONFIG_DEBUG_INFO                       Kernel hacking-->Kernel debugging-->Compile the kernel with debug info

CONFIG_DEBUG_FS                           Kernel hacking-->Debug Filesystem

让内核支持DEBUGFS,使能宏CONFIG_DEBUG_FS

CONFIG_RELAY: General Setup -> user spacerelay support

编译通过,不过生成的镜像文件太大,要精简。

去掉I2C和MMC卡驱动的支持,

PPP网络支持,       Device  Drivers--->Netowork device supprot-->PPP protocol

去掉WiFI的支持      Device  Drivers--->Netowork device supprot-->Wireless LAN protocol

去掉WiFi支持后,编译成的内核大小为1.28M可以使用了。

经过查阅资料得知,kprobe的使用,还需要有debugfs调试文件系统的配合,因此,需要让系统启动时,生成debugfs目录

稳定性专题 | StackOverFlowError 常见原因及解决方法

导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测.故障演练.JVM.应用容器.服务框架.流量调度.监控.诊断等多个技术领域,以更结构化的 ...

NoSuchMethodError 常见原因及解决方法

相 关 阅 读 导读 『StabilityGuide』是阿里多位阿里技术工程师共同发起的稳定性领域的知识库开源项目,涵盖性能压测.故障演练.JVM.应用容器.服务框架.流量调度.监控.诊断等多个技术领 ...

.NET 3.5 安装错误的四个原因及解决方法

.net framework 3.5 安装错误的四个常见原因及解决方法,飓风软件站整理,转载请注明. 1.清除所有版本 .NET Framework  安装错误后在系统中遗留的文件: 如果您以往安装过 ...

MySQL CPU 使用率高的原因和解决方法

用户在使用 MySQL 实例时,会遇到 CPU 使用率过高甚至达到 100% 的情况.本文将介绍造成该状况的常见原因以及解决方法,并通过 CPU 使用率为 100% 的典型场景,来分析引起该状况的原因 ...

coreseek常见错误原因及解决方法

coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和 ...

Servlet常见错误及解决方法

常见错误及解决方法 1. 404产生的原因为Web服务器(容器)根据请求地址找不到对应资源,以下情况都会出现404的错误提示: 输入的地址有误(应用名大小写不正确,名称拼写不正确) 在web.xml文 ...

DedeTag Engine Create File False提示的种种原因及解决方法

DedeTag Engine Create File False提示的种种原因及解决方法 第一种情况:站点.文件夹权限不足造成无法建立文件 这种情况的出现,一方面可能是Apache设置的读写权限较严格 ...

需要我们了解的SQL Server阻塞原因与解决方法

需要我们了解的SQL Server阻塞原因与解决方法 上篇说SQL Server应用模式之OLTP系统性能分析.五种角度分析sql性能问题.本章依然是SQL性能 五种角度其一“阻塞与死锁” 这里通过连 ...

随机推荐

U3D中的 Coroutine程序 解析

今天咱就说说协同程序coroutine. 什么是协同程序 先说说啥是协程:它的表现形式非常像线程,对线程有过接触的朋友可能更理解我这句话的意思,你没接触过线程,那么理解它会有一些难度.但是它不存在线程 ...

(转)HTML文档头部信息

原文:http://www.cnblogs.com/sunyunh/archive/2012/07/25/2609199.html HTML(3)HTML文档头部信息   ..

【h5-egret】如何快速开发一个小游戏

1.环境搭建 安装教程传送门:http://edn.egret.com/cn/index.php?g=&m=article&a=index&id=207&terms1_ ...

Android图片框架---Glide

Glide *** 使用* 一.添加依赖* compile 'com.github.bumptech.glide:glide:3.7.0'* compile 'com.android.support: ...

php 分页类(2)

hdu 2048 递推&&错排

直接贴出递推公式: cnt[n]=(i-1)*(cnt[n-1]+cnt[n-2]); 数组保存的是失败的种数 AC代码: #include const int maxn= ...

在用单片机接受串口数据的时候,第一位是0x0A

unsigned char data len=0; //命令字符串长度if(RI) //如果数据已经接收完,即RI=1{ RI=0; //对RI进行清零 cmd_buf[counter] = SBUF ...

PTA寒假三

抓老鼠啊~亏了还是赚了? (20 分) 某地老鼠成灾,现悬赏抓老鼠,每抓到一只奖励10元,于是开始跟老鼠斗智斗勇:每天在墙角可选择以下三个操作:放置一个带有一块奶酪的捕鼠夹(T),或者放置一块奶酪(C ...

库函数wordcloud安装的问题

在对python有了一定的了解之后就对python的第三方库产生了十分浓厚的兴趣,因为python的很多功能都是要依靠第三方库函数来实现的,而且在计算机二级刚刚加入的python考试中也有对第三方库的 ...

python内核死亡的原因_Kernel Panic常见原因以及解决方法相关推荐

  1. Kernel Panic常见原因以及解决方法

    Technorati 标签: Kernel Panic 出现原因 1. Linux在中断处理程序中,它不处于任何一个进程上下文,如果使用可能睡眠的函数,则系统调度会被破坏,导致kernel panic ...

  2. uClinux 内核编译常见错误及解决方法(zt)

    uClinux 内核编译常见错误及解决方法(uClinux kernel compile Troubleshooting) uClinux kernel compile Troubleshooting ...

  3. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课...

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

  4. Android ExceptionThrowable 常见异常和解决方法 奔溃日志上报 monkey异常修改

    java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception. 注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理. ...

  5. c语言编译配置文件出错,Android4.4/CM11编译常见错误及解决方法!

    Android4.4/CM11编译常见错误及解决方法! 前言:关于Android4.4/CM11编译中遇到的一些错误,本人进行了整理.有需要的童鞋可以做个参考,如果有什么建议也欢迎指出! 问题1: 编 ...

  6. Android4.4/CM11编译常见错误及解决方法!

    Android4.4/CM11编译常见错误及解决方法! 前言:关于Android4.4/CM11编译中遇到的一些错误,本人进行了整理.有需要的童鞋可以做个参考,如果有什么建议也欢迎指出! 问题1: 编 ...

  7. 老男孩教育每日一题-2017年4月28日- MySQL主从复制常见故障及解决方法?

    MySQL主从复制常见故障及解决方法? 1.1.1故障1:从库数据与主库冲突 show slave status; 报错:且show slave status\G Slave_I/O_Running: ...

  8. 光纤收发器常见故障及解决方法

    光纤收发器一般应用在以太网电缆无法覆盖.必须使用光纤来延长传输距离的实际网络环境中,通常定位于宽带城域网的接入层应用,在各种监控安全工程中应用非常的广泛.但是我们在使用光纤收发器的过程中难免会碰到一些 ...

  9. java咖啡机故障5_【咖啡小常识】咖啡机不得不知道的常见故障及解决方法

    原标题:[咖啡小常识]咖啡机不得不知道的常见故障及解决方法 咖啡行业交流请加私 人微信精品咖啡香,微信号: (长按复制) thinkingcapacity 一.没有蒸汽或做出的咖啡不热 可能原因 1. ...

最新文章

  1. pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动标准差(rolling std)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额标准差
  2. scala技术文章集锦
  3. 【通知】《深度学习之图像识别》再版工作启动,欢迎指导和提出建议
  4. OpenCV导出模板参数文件
  5. ios跨线程通知_一种基于Metal、Vulkan多线程渲染能力的渲染架构
  6. android 服务器返回302,Android WebView 内处理302重定向不跳转的解决
  7. Geatpy框架使用基于NSGA-II算法的多染色体多目标进化算法案例(moea_psy_NSGA2_templet)
  8. php中is null,php中empty(), is_null(), isset()函数区别
  9. 【Elasticsearch】2021 年的顶级 ETL 工具......以及对 ETL 说“不”的理由
  10. java系列4:数组的默认值
  11. 视频教程-2020年软考网络工程师基础知识软考视频教程-软考
  12. 如何用10分钟做出一个表情包视频
  13. cdr三角形转化为圆角,CDR实现圆角多边形的三种方法
  14. 3.30团体天梯赛后个人感想
  15. HDU 5378 树上的概率DP Leader in Tree Land
  16. LTE Phich 分析
  17. 我的四轴飞行器经验总结(二)-无人机应用场景
  18. mount 挂载远端目录
  19. 拍摄的多段视频怎么去掉声音?两种方法快速实现
  20. rust矿洞绳子怎么爬下_rust矿洞绳子怎么爬 | 手游网游页游攻略大全

热门文章

  1. 抢鲜体验:openGauss从源码到主备
  2. MySQL DBA面试高频三十问
  3. 解密诡异并发问题的幕后黑手:可见性问题
  4. 在openGauss上做开发?这个大赛拿出30万寻找开源的你
  5. 云图说|ASM灰度发布,让服务发布变得更敏捷、更安全
  6. 【有奖征文】WEB前端大作战,走在技术最前端!
  7. 云小课|云数据库RDS实例连接失败了?送你7大妙招轻松应对
  8. 【华为云技术分享】低代码开发平台发展趋势:低代码——炒作还是趋势?
  9. Flask 蓝图机制及应用
  10. 基于netty4.x开发时间服务器