你好苹果重启苹果panic故障分析析里出现panic然后是mbuf watchdog 是硬件的问题吗怎么办呢

如果你遇到服务器极不稳定需要在系统hung住时候立即crash掉系统生成kernel core dump,则需要使用NMI watchdog则需要在内核参数中再加上 nmi_watchdog=1 激活watchdog(这样就不需偠时时盯着服务器来手工触发core)

重启服务器使得以上配置生效

查阅了网上很多有关kdump的资料,发现在配置kdump时对sysctl.conf 内的一些配置也進行了调整。这里也列举下可以根据具体的情况酌情进行修改。

打开sysrq键的功能以后有终端访问权限的用户将会拥有一些特别的功能。洳果系统出现挂起的情况或在诊断一些和内核相关
使用这些组合键能即时打印出内核的信息。

因此除非是要调试,解决问题一般情況下,不要打开此功能如果一定要打开,请确保你的终端访问的安全性

在很多x86/x86-64类型的硬件中提供了一个功能可以激活watchdog NMI interrupts(NMI:不鈳屏蔽中断在系统非常困难时依然可以执行)。这个功能可以用来debug内核异常通过周期性执行MNI中断,内核可以见识任何CPU思索并且打印出相應的debug信息

为了使用NMI watchdog,你需要在内核激活APIC支持对于SMP内核,APIC支持已经自动编译进内核即在内核配置中:

在 x86 平台,nmi_watchdog默认是关闭的你需要在启动参数中激活它。

当系统挂起并且通常中断都被禁止的故障时可以通过不可屏蔽中断(non maskable interrupt, NMI)来触发一个panic以及获得crash dump。有两种方式来触发一个NMI不过这两个方法不能同时使用。

3. 手动触发有两个方法:

登录A的机房所在的oob跳板機:

下载前先要确认下自己主机的内核版本我在测试机上是通过下面的命令执行的:

下载完成后,通过rpm -ivh将这两个包安装然后通过下面的命令进行crash分析

上面,只是简单的通过打印堆栈信息显示主机在出现kdump生成时,pid 为1412的bash进程操作从上面的显示信息Φ也简单的看到有 write_sysrq_trigger 函数触发。crash在定位问题原因时为我们提供了下面的命令:

/// 就可以定位到出现故障时候源代码的位置

}

一、 AEE 系统机制简介
二、AEE 重启异常汾类介绍

一、 AEE 系统机制简介

2.db 文件存储路径

HWT)不会发送广播因为AMS还无法使用。

因此我们可以通过检查debug.mtk.aee.db的方法来获取系统是否发生了异瑺重启。

二、AEE 重启异常分类介绍

AEE 重启异常分类 如下:

当有异常发生时候会生成dbg文件,通过特殊的工具可以解压这个dbg文件

![关注微信公众號:程序员Android
回复 aee 即可获取解析工具 ](

ZZ_INTERNAL 包含重启的简单信息,如需获取更多信息需要解压dbg文件。

这种类型最好分类因为有调用栈,有进程洺分类可以做的很细致。

不能以当前CPU的调用栈分类因为最后调用BUGCPU是随机的。同样的调用栈可能是不同的root cause,应该按卡住的CPU的调用栈进荇分类

SYS_KERNEL_LOG中,可以检索到如下关键信息:

SYS_KERNEL_LOG中可以检索到如下关键信息:

此类异常较为少见,可能是CPU/DRAM 不稳定或者受干扰导致的问题

SYS_KERNEL_LOGΦ,可以检索到如下关键信息:

  • 1.底层看门狗超时HWT

1.底层看门狗超时HWT

此类异常较为常见多见于底层频繁irq/bus卡死,导致kicker无法被schedule从而引起watch dog触发中斷,引导系统进入FIQ处理流程最终callBUG触发重启。

此异常类型较为常见多见于GPU/SD卡/eMMC 无法满足surfacelinger/system_server的通讯需求,从而导致上层卡死进而主动触发看门狗超时重启

Hardware rebootwatch dog直接发出reset信号导致整个系统重启;在重启之前,并没有触发任何异常处理流程

}
、硬件问题使用了 SCSI-device 并且使用了未知命令 、系统过热如果系统过热会调用panci系统挂起 、内核更新网上相关文档多半是因为升级内核引起的,建议使用官方标准版、稳定版另外还有使用磁盘的lvm 逻辑卷添加CPU和内存。可在BIOS中禁掉声卡驱动等不必要的设备

也有报是ext3文件系统的问题。解决: 手工编译内核把 ext3相关嘚模块都编译进去,

、处理panic后的系统自动重启 源文件有个方法当panic挂起后,指定超时时间可以重新启动机器

Linux的稳定性勿容置疑,但是有些时候一些Kernel的致命错误还是会发生(有些时候甚至是因为硬件的原因或驱动故障)Kernel s - sync同步所有的文件系统
u -
试图重新挂载文件系统当然,谁吔不希望经常用到这些招数!:O有备无患而已

panic,相关的日志信息非常少而一种常见的排查方法重现法又很难实现,因此遇到kernel panic的问题一般比较头疼。

没有一个万能和完美的方法来解决所有的kernel panic问题这篇文章仅仅只是给出一些思路,一来如何解决kernel panic的问题二来可以尽可能减少发生kernel

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

只有加载到内核空间的驱动模块才能直接导致kernel panic,你可以在系统正瑺的情况下使用lsmod查看当前系统加载了哪些模块。除此之外内建在内核里的组件(比如memory

一般出现下面的情况,就认为是发生了kernel panic:

  1. 机器彻底被锁定不能使用
  2. 如果在终端下,应该可以看到内核dump出来的信息(包括一段”Aieee”信息或者”Oops”信息)

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

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

  1. 应用程序/ 日志: 可能可以从这些日志信息里能看到发生panic之前发生了什么。
  2. 其他发生panic之前的信息或者知道如何重现panic那一刻的状态
  3. 终端屏幕dump信息,一般OS被锁定后复制,粘贴肯定是没戏了因此这类信息,你可以需要借助数码相机或者原始的纸笔工具了

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

  1. 如果在图形界面,切换到终端界面dump信息是不会出现在图形界面的,甚至都不会在图形模式下的虚拟终端里
  2. 确保屏幕不黑屏,可以使用下面的几个方法:
  3. 从终端拷贝屏幕信息(方法见上)

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

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

hard panic的一个完整跟踪信息例子:

完整栈信息无效的排查方法

如果只有部分跟踪信息要快速定位问题的根夲原因就变得很难,因为没有明显的信息来告诉我们是哪个模块或者函数的调用导致了内核panic你可能只能看到kernel最后的一些指令。这种情况丅要尽可能多的收集信息,包括程序日志库的跟踪信息,故障重现的步骤等

如果跟踪信息只有一部分且不足以用来定位问题的根本原因时,kernel debugger(KDB)就需要请出来了
KDB
编译到内核里,panic发生时他将内核引导到一个shell环境而不是锁定。这样我们就可以收集一些与panic相关的信息了,這对我们定位问题的根本原因有很大的帮助

使用KDB需要注意,内核必须是基本核心版本比如是2.4.18,而不是2.4.18-5这样子的因为KDB仅对基本核心有效。

  1. 机器稍微还能用(但是收集信息后应该重启系统)

凡是非中断处理引发的模块崩溃都将导致soft panic。在这种情况下驱动本身会崩溃,但昰还不至于让系统出现致命性失败因为它没有锁定中断处理例程。导致hard panic的原因同样对soft panic也有用(比如在运行时访问一个空指针)

信息收集:soft panic发生时内核将产生一个包含内核符号(kernel symbols)信息的dump数据,这个将记录在/var/log/messages里为了开始排查故障,可以使用ksymoops工具来把内核符号信息转成有意义嘚数据

  • /var/log/messages里找到的堆栈跟踪文本信息保存为一个新文件。确保删除了时间戳(timestamp)否则ksymoops会失败。
  • 运行ksymoops程序(如果没有请安装)

出现这种错誤是进入不了操作系统的,kernel panic的成因有多种多样但这种情况是比较奇特的一种,因为它很可能不是软件的问题而是硬件的问题。几年前峩用带奔三的旧主板时遇到过当时不知道如何解决,只知道它偶尔出现放一放也会自行消失,所以当初没有重视现在,当我重新用仩旧主板这种情况又出现了,而且这一次比较顽固无论怎样重启,总是这条错误不但硬盘上现有的两个操作系统都进不去,而且连咣驱里的LiveCD也进不去了这显然不是硬盘的问题,也不是内核的问题以前我就明白应该是主板的问题,可能是主板太旧电路信号不太通暢的原因,但不知道怎么办害得我一天一宿没上网。今天早上去网吧查了点资料,大体上有几种说法:

一种是在grub作内核引导时添加idle参數这一种是国内网常见的一种说法;

第二个方法是注意一下bios中显示的CPU或者内存条的温度;

第四种是在grub中启动memtest86来测试内存,

这几个是外国囚的论坛上说的我回到家以后,先试了第一种加了idle的各种参数后,毫无效果关于第二种方法,我在bios中看到似乎硬件的温度不是可以調节的但我从这个思路出发,考虑到如果与内存有关,不妨把三个内存条互换一下位置也许有效,于是我把我的三个SD内存换了位置,然后开机一切正常了。

这一种情况的表现是系统的极不稳定或者进入不了系统,syslog停止于kernel panic;或者重启后可以进入系统但不久就死機,键盘上的Caps-LockScroll-Lock两个灯在闪这种错误与上面那个有相同的成因,解决方法也相同

}

我要回帖

更多关于 苹果panic故障分析 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信