kdump简介
- kdump是Linux系统中一种用于保存系统崩溃时的内存转储(crash dump),以便进行故障诊断和调试的工具。
- 在Linux系统中,如果遇到严重的内核崩溃或死锁等问题,通常会导致系统无法继续正常运行。为了解决这种情况,kdump允许在系统崩溃时将当前内核的内存转储保存到硬盘上。kdump通过一些特定的配置和设置,可以在系统崩溃时触发一个独立的内核(用作专用的crash内核),该内核能够将系统的内存转储保存到预定义的目录中。这个转储文件可以记录包括内核代码、进程状态、内核堆栈跟踪等信息,使开发人员和系统管理员能够在崩溃发生时进行故障分析和调试。
- kdump是一种非常有用的工具,它可以帮助我们更有效地诊断系统崩溃问题,定位和解决导致系统异常的根本原因。
Kdump使用须知
- 系统配置:要使用kdump功能,您的系统必须满足一些硬件和配置要求:
必须有足够的磁盘空间来存储转储文件。
必须有足够的内存来容纳专用的crash内核。
CPU必须支持物理地址扩展(PAE)或64位寻址模式。
- 内核配置:您的Linux内核必须正确配置以启用kdump功能。通常,许多发行版都已经为您设置了合适的内核配置。
3.专用的crash内核:为了执行转储过程,kdump需要一个独立的crash内核。这个crash内核是一个精简的内核,只包含用于内存转储和调试的必要组件。
- 存储位置:您需要选择一个足够大且可靠的存储位置来保存转储文件。这可能是本地磁盘、NFS共享目录或iSCSI设备等。
- 网络配置(可选):如果您选择将转储文件发送到远程服务器进行分析,则需要配置网络连接和远程服务器的接收端。
Kdump配置方法
以EulerOS以及CentOS 7/8系列Linux产品为例:
- 查看是否已安装kexec-tools
# rpm -qa | grep kexec-tools
如果没有安装,执行下面命令安装kexec-tools。
# yum install -y kexec-tools
- 设置kdump开机启动
# systemctl enable kdump
- 设置crashkernel参数,设置这个参数的目的是预留内存给捕获内核(capture kernel)
首先查看该参数是否已经设置。
# grep crashkernel /proc/cmdline
如果有显示,则表示已经设置,如果没有显示,则需要重新设置。
编辑/etc/default/grub文件
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel00/root rd.lvm.lv=rhel00/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
在GRUB_CMDLINE_LINUX一行添加crashkernel=auto。
- 更新grub,执行更新grub命令,使配置生效:
# grub2-mkconfig -o /boot/grub2/grub.cfg
- 打开/etc/kdump.conf文件中找到“path”参数,添加以下内容。
path /var/crash
默认是保存在/var/crash目录下,如果要保存到其他目录,则改成对应的目录,例如保存在/home/kdump下,则改成:
path /home/kdump
## 请确保指定的路径有足够的空间保存vmcore,建议剩余空间不小于物理内存(RAM)的大小,也可以保存在SAN,NFS等共享设备上。
- 设置转存vmcore级别,查看/etc/kdump.conf文件,是否存在以下设置,如果存在则无需添加。
core_collector makedumpfile -d 31 -c
-c:表示压缩vmcore文件,
-d:表示过滤掉部分无效的内存数据,可以根据需要调整,一般31即可,31是由如下的值与计算而成。
zero pages = 1
cache pages = 2
cache private = 4
user pages = 8
free pages = 16
- 设置内核参数(可选)
为了控制在哪些场景下触发kdump,内核提供了一些参数,建议设置以下参数:
kernel.hardlockup_panic=1
kernel.panic=5
kernel.panic_on_oops=1
kernel.softlockup_panic=1
kernel.unknown_nmi_panic=1
kernel.nmi_watchdog=1
将以上配置参数写入/etc/sysctl.conf文件并保存。另外,可以选择添加如下几个参数到/etc/sysctl.conf文件中。
kernel.panic_on_io_nmi=1
kernel.panic_on_warn=1
- 进入天翼云控制台-云主机详情页,对当前云主机进行重启,使以上配置生效。
Kdump配置生效验证
- 执行以下命令,确认回显信息中crashkernel=auto
# cat /proc/cmdline |grep crashkernel
- 执行以下命令,并确认回显信息中的配置信息正确。
# grep core_collector /etc/kdump.conf |grep -v ^"#"
core_collector makedumpfile -l --message-level 1 -d 31
- 执行以下命令,并确认回显信息中的配置信息正确。
# grep path /etc/kdump.conf |grep -v ^"#"
path /var/crash
- 执行以下命令,并确认回显信息中的Active的状态为active (exited)。
# systemctl status kdump
- 执行测试命令。
# echo c > /proc/sysrq-trigger
这会触发kdump,重新启动,并将生成的vmcore文件保存的path参数指定的位置。
- 检查vmcore是否生成。
到所在环境path参数所指定的路径查看是否有vmcore文件生成,例如/var/crash/目录。
# ll /var/crash/
可以看到生成了一个文件夹,里面有vmcore文件。