ubuntu内核转储分析——kdump和crash的下载和使用
内存转储机制
需要用到的工具
kexec
kexec是一个快速启动机制,允许通过已经运行的内核的上下文启动一个Linux内核,不需要经过BIOS。BIOS可能会消耗很多时间,特别是带有众多数量的外设的大型服务器。这种办法可以为经常启动机器的开发者节省很多时间。
Kexec是实现kdump机制的关键,它包括2个组成部分:
- 内核空间的系统调用kexec_load,负责在生产内核(production kernel 或 first kernel)启动时将捕获内核(capture kernel或sencond kernel) 加载到指定地址。
- 用户空间的工具kexec-tools,他将捕获内核的地址传递给生产内核,从而在系统崩溃的时候能够找到捕获内核的地址并运行。
没有kexec就没有kdump。先有kexec实现了在一个内核中可以启动另一个内核,才让kdump有了用武之地。
kdump
kdump是一种在linux内核崩溃时获取内存转储的方法,它的主要原理是为系统配置两个内核,其中用于运行正常业务的内核称为生产内核,而在内核崩溃时用于转储信息的内核被称为捕获内核(crash kernel)。
最初系统通过生产内核启动,并在启动过程中为捕获内核保留其运行所需的内存。当系统启动完成后,它将通过应用层服务,将捕获内核镜像加载到其对应的保留内存中。此后,生产内核就可像其它系统一样,正常地处理相关的业务。
若内核在运行中发生崩溃,且已设置了捕获内核,则生产内核则会首先准备好转储文件,然后启动捕获内核。捕获内核启动以后,将会生成转储文件vmcore。
crash
当 linux 系统内核发生崩溃的时候,生成了转储文件 vmcore。而后通过分析该 vmcore 文件就可以诊断出内核崩溃的原因,从而进行操作系统的代码改进。而 crash 就是一个被广泛使用的内核崩溃转储文件分析工具。
安装kdump
sudo apt install linux-crashdump
配置kexec-tools
安装时,会弹框确认是否在崩溃时,通过 kexec-tools 快速重新启动到一个新的内核,以便进行崩溃信息的收集和分析。
这里选择Yes
如果选择了No,也可以手动启动
sudo dpkg-reconfigure kexec-tools
这将修改/etc/init.d/kexec
中的LOAD_KEXEC
,LOAD_KEXEC=true
(未测试)
配置kdump-tools
上面的内容选择了Yes,接着继续弹出一个框,这里仍然选择Yes
如果选择了No,也可以手动启动(未测试)
sudo dpkg-reconfigure kdump-tools
配置成功后生成的文件
安装成功后,将会在/etc/init.d中多了几个文件
kdump-tools
kexec
kexec-load
确认kdump-tool是否启用
sudo kdump-config show
如果未安装kdump,将会提示
kdump-config: command not found
如果安装了kdump-config, 将会提示:
- /etc/default/kdump-tools: USE_KDUMP is not set or zero
- no crashkernel= parameter in the kernel cmdline
dpkg-query: package ‘kdump-tools’ is not installed and no information is available