相关内容

就业课程

热门标签

python RHCA RHE7.0 KVM linux就业培训 linux培训 linux 金源万博 mysql 云计算 python培训 RedHat redhat linux Redhat培训 redhat认证 RH442 linux认证 RHCE RHCE培训 openstack openstack培训 北京金源万博 RHCE培训 Django 虚拟化 Python运维开发

您所在的位置:首页>新闻动态>新闻内容

内核调试工具(一)-Kdump

kdump简介

 

kdump是系统崩溃的时候,用来转储运行内存的一个工具。

系统一旦崩溃,内核就没法正常工作了,这个时候将由kdump提供一个用于捕获当前运行信息的内核,

该内核会将此时内存中的所有运行状态和数据信息收集到一个dump core文件中以便之后分析崩溃原因。

一旦内存信息收集完成,可以让系统将自动重启。

 

kdump是RHEL5之后才支持的,2006被主线接收为内核的一部分。它的原理简单来说是在内存中保留一块

区域,这块区域用来存放capture kernel,当production kernel发生crash的时候,通过kexec把保留区域的

capure kernel给运行起来,再由捕获内核负责把产品内核的完整信息 - 包括CPU寄存器、堆栈数据等转储

到指定位置的文件中。

 

kdump原理

 

kexec是kdump机制的关键,包含两部分:

内核空间的系统调用kexec_load。负责在生产内核启动时将捕获内核加载到指定地址。

用户空间的工具kexec-tools。将捕获内核的地址传递给生产内核,从而在系统崩溃的时候找到捕获内核的地址并运行。

 

kdump是一种基于kexec的内核崩溃转储机制。当系统崩溃时,kdump使用kexec启动到第二个内核。第二个内核通常

叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二个内核启动使用。

由于kdump利用kexec启动捕获内核,绕过了BIOS,所以第一个内核的内存得以保留。这是内存崩溃转储的本质。

捕获内核启动后,会像一般内核一样,去运行为它创建的ramdisk上的init程序。而各种转储机制都可以事先在init中实现。

为了在生产内核崩溃时能顺利启动捕获内核,捕获内核以及它的ramdisk是事先放到生产内核的内存中的。

生产内核的内存是通过/proc/vmcore这个文件交给捕获内核的。为了生成它,用户工具在生产内核中分析出内存的使用和

分布等情况,然后把这些信息综合起来生成一个ELF头文件保存起来。捕获内核被引导时会被同时传递这个ELF文件头的

地址,通过分析它,捕获内核就可以生成出/proc/vmcore。有了/proc/vmcore这个文件,捕获内核的ramdisk中的脚本就

可以通过通常的文件读写和网络来实现各种策略了。

 

kdump配置

 

RHEL5开始,kexec-tools是默认安装的。

如果需要调试kdump生成的vmcore文件,需要手动安装kernel-debuginfo包。

 

(1) 预留内存

可以修改内核引导参数,为启动捕获内核预留指定内存。

在/etc/grub.conf (一般为/boot/grub/grub.conf的软链接)中:

crashkernel=Y@X,Y是为kdump捕获内核保留的内存,X是保留部分内存的起始位置。

默认为crashkernel=auto,可自行设定如crashkernel=256M。

 

(2) 配置文件

配置文件为/etc/kdump.conf,以下是几个常用配置:

 

# path /var/crash

默认的vmcore存放目录为/var/crash/%HOST-%DATE/,包括两个文件:vmcore和vmcore-dmesg.txt

 

# ssh <user@service>

will copy /proc/vmcore to <user@server>:<path>/%HOST-%DATE/ via SSH

make sure user has necessary write permissions on server.

自动拷贝到远程机器上。

 

# default <reboot | halt | poweroff | shell | mount_root_run_init>

Actions to perform in case dumping to intended target fails.

转储失败时执行。

 

(3) 启动服务

# chkconfig kdump on // 开机启动

# service kdump status // start、stop、restart等

 

(4) 功能验证

Magic System request key is a magical key combo you can hit which the kernel will respond to regardless

of whatever else it is doing, unless it is completely locked up.

使用sysrq需要编译选项CONFIG_MAGIC_SYSRQ的支持。详细信息可看documentation/sysrq.txt。

 

故意让系统崩溃,来测试kdump是否正常工作。

# echo c > /proc/sysrq-trigger

Will perform a system crash by a NULL pointer dereference.

A crash dump will be taken if configured.

 

Magic SysRq还有一些很有趣的值,有的具有很大的破环性,输出在/var/log/messages:

f:call oom_kill to kill a memory hog process. 执行oom killer。

l:shows a stack backtrace for all active CPUs. 打印出所有CPU的stack backtrace。

m:dump current memory info. 打印出内存使用信息。

p:dump the current registers and flags. 打印出所在CPU的寄存器信息。

 

(5) 捕获内核

捕获内核是一个未压缩的ELF映像文件,查看捕获内核是否加载到内存中:

# cat /sys/kernel/kexec_crash_loaded

缩小捕获内核占用的内存:

# echo N > /sys/kernel/kexec_crash_size

上一篇:互联网+下 汽配经销商该如何走出困境?...
下一篇:互联网+对哪些传统行业堪称颠覆?...

金源在线客服

QQ在线咨询

咨询电话
010-83650488

在线咨询

在线咨询

电话咨询