linux 异常分析工具(一)

linux 内核OOPS(二)

linux 内核出现死机

产生linux kernel死机原因有硬件引起,有驱动本身错误,有调试函数不合规定

       (1)watchdog 检测lockup 异常

Linux 正常情况下, 一个CPU 参与到系统之中后, 会创建一个watchdog 内核进程用于检测CPU 的运行情况, 可以通过以下命令查看到进程:    

# ps auxf | grep "watchdog"
11 root [watchdog/0]
12 root [watchdog/1]
17 root [watchdog/2]
22 root [watchdog/3]
821 root grep watchdog

可以看到, 每个CPU核都有一个watchdog 进程, 后缀代表CPU 号. 此进程用于维护每个CPU 的全局变量watchdog_touch_ts, 然后再建立一个定时器用于检测这个全局变量是
否更新了, 具体实现在kernel/watchdog.c 代码中.

static void watchdog_prepare_cpu(int cpu)
{
struct hrtimer *hrtimer = &per_cpu(watchdog_hrtimer, cpu);
WARN_ON(per_cpu(softlockup_watchdog, cpu));
hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
hrtimer->function = watchdog_timer_fn;
}
这类问题的现象如图1, 图1 所示一样. 在图3-4 中的现象是soft lockup. 从下
面的信息来看, 有当前CPU 正在运行的进程swapper/0:1, 出错的是CPU1, 同时还打印
超时的时间, 即已经超过多久没有更新watchdog 的值了, 而接着就是出错CPU 的调用栈.



                                                               图 1    softlookup 出错类型



           图 2   hardlookup 出错类型

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐