从虚拟化前端Bug学习分析Kernel Dump( 四 )


这篇文章我想通过分析一个实际的案例 , 尽量把学习Kernel Dump需要用到的知识串起来 , 虽然某些知识也许只会在这个案例中用到 , 但是我相信所用到的方法是可以应用到各个地方的 。

线上有一台 VM 宕机了 , 刚好有抓到 dump , 拿到一台测试机上就可以开始分析了 。 首先需要的是 kernel 版本对应的 symbol , 如果事先不知道 kernel 的版本 , 可以通过 `strings corefile | grep \"Linux version\"' 获取到当前 corefile 的 kernel 版本 , 例如 3.10.0-862.14.4.el7.x86_64

在获取到内核版本之后 , 根据相应的发行版以及系统架构到特定的 symbol 发布页面下载 symbol , 这里的发行版是 Centos , 可以到http://debuginfo.centos.org/下载 。 如果是 Ubuntu 发行版 , 可以到http://ddebs.ubuntu.com/下载 。 要找到指定 kernel 版本的 symbol 很简单 , 只需要拿着 kernel 版本 3.10.0-862.14.4.el7.x86_64 搜一下就能找到了 , 通常我们需要的 symbol 的只有下面这三个中的两个 , 但是我总是记不住是哪两个 , 所以我会把三个都下载下来并安装:kernel-debug-debuginfo-3.10.0-862.14.4.el7.x86_64.rpm、kernel-debuginfo-3.10.0-862.14.4.el7.x86_64.rpm、kernel-debuginfo-common-x86_64-3.10.0-862.14.4.el7.x86_64.rpm 。 在安装的时候由于依赖的关系需要先安装 common 的 symbol 才能安装其它 symbol , 另外如果测试机上的 kernel 版本比 corefile 的版本新 , 需要加上 --force 选项才能安装上 。

推荐阅读