免责声明:本文档可能包含第三方产品信息,该信息仅供参考。腾讯云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
概述
kdump 是 Linux 系统的一种内核崩溃(kernel crash)转储机制。当系统出现内核崩溃时,它能够捕获崩溃时的内存转储信息,以便后续分析和排除故障。本文主要介绍 Linux 系统的云服务器 CVM 实例如何关闭或开启 kdump 服务。
关闭 kdump 服务及释放 kdump 预留的内存
Linux 系统启动时,kdump 会配置一块内核内存区域作为“保留内存”,该保留内存区域专门用于在系统崩溃时启动第二个内核。若业务对分析内核崩溃原因不太关注,想要释放这部分预留内存,可以考虑关闭 kdump。
注意:关闭 kdump 后出现内核崩溃存在无法诊断崩溃原因的风险。
不同的 Linux 发行版对应的关闭方法不同,本文列举了部分操作系统关闭 kdump 及释放 kdump 预留的内存的方法。
以 CentOS 7/CentOS 8/TencentOS 2/TencentOS 3/TencentOS 4 操作系统为例,可参考如下步骤关闭 kdump 及释放 kdump 预留的内存。
1. 执行如下命令停止 kdump 服务及禁止开机启动并查看相关状态。
systemctl disable kdump --nowsystemctl status kdump.servicesystemctl is-enabled kdump.service

2. 使用 grubby 相关命令将 grub 参数中的 crashkernel 配置去掉,更新配置到启动文件。
2.1 执行如下命令查看 grubby 显示的 args 参数中是否包含 crashkernel 相关配置项并备份。
grubby --info=ALL|tee -a grubby.bak.$(date +%Y%m%d)

2.2 执行如下命令清除 crashkernel 相关参数、自动更新 grub 配置及查看清除后的参数配置。
grubby --update-kernel=ALL --remove-args="crashkernel"grubby --info=ALL

3. 重启服务器,验证 kdump 服务是否关闭及 kdump 预留的内存是否释放。
警告:重启服务器可能会造成业务中断,请谨慎评估重启操作对业务的影响。
在重启服务器之后,可以通过执行以下命令来检查服务器是否已成功重启(通过查看 uptime 命令显示的时间是否为执行重启操作至当前时间的时间间隔来判断)、kdump 服务状态是否为 inactive (dead) 状态、crash 预留的内存大小
/sys/kernel/kexec_crash_size
是否为0、Linux 启动的命令行参数 /proc/cmdline
是否无 crashkernel 相关配置。uptimesystemctl status kdump.servicecat /sys/kernel/kexec_crash_sizecat /proc/cmdline

如果服务器不允许重启,但想释放 kdump 占用的内存,可以执行如下命令清除 kdump 服务中为 crash 预留的内存。
echo 0 >/sys/kernel/kexec_crash_size
通过如下命令验证内存地址空间不再为 kdump 预留,即返回值为0。
cat /sys/kernel/kexec_crash_size
以 OpenCloudOS 7/OpenCloudOS 8/OpenCloudOS 9 操作系统为例,可参考如下步骤关闭 kdump 及释放 kdump 预留的内存。
1. 执行如下命令停止 kdump 服务及禁止开机启动并查看相关状态。
systemctl disable kdump --nowsystemctl status kdumpsystemctl is-enabled kdump

2. 修改
/etc/default/grub
,将 GRUB_CMDLINE_LINUX
中的 crashkernel 配置去掉,更新配置到启动文件。2.1 执行如下命令备份
/etc/default/grub
文件。cp /etc/default/grub /etc/default/grub.bak.$(date +%Y%m%d)
2.2 使用 vim 或其他编辑器将
/etc/default/grub
中 GRUB_CMDLINE_LINUX
行的 crashkernel=XXX
配置项(如下图标红内容)清除并保存。
2.3 执行如下命令更新 grub 配置文件。
grub2-mkconfig -o /boot/grub2/grub.cfg

3. 重启服务器,验证 kdump 服务是否关闭及 kdump 预留的内存是否释放。
警告:重启服务器可能会造成业务中断,请谨慎评估重启操作对业务的影响。
在重启服务器之后,可以通过执行以下命令来检查服务器是否已成功重启(通过查看 uptime 命令显示的时间是否为执行重启操作至当前时间的时间间隔来判断)、kdump 服务状态是否为 inactive (dead) 状态、crash 预留的内存大小
/sys/kernel/kexec_crash_size
是否为0、Linux 启动的命令行参数 /proc/cmdline
是否无 crashkernel 相关配置。uptimesystemctl status kdump.servicecat /sys/kernel/kexec_crash_sizecat /proc/cmdline

如果服务器不允许重启,但想释放 kdump 占用的内存,可以执行如下命令清除 kdump 服务中为 crash 预留的内存。
echo 0 >/sys/kernel/kexec_crash_size
通过如下命令验证内存地址空间不再为 kdump 预留,即返回值为0。
cat /sys/kernel/kexec_crash_size
以 Ubuntu 18.04/Ubuntu 20.04/Ubuntu 22.04/Ubuntu 24.04/Debian 10/Debian 11/Debian 12 操作系统为例,可参考如下步骤关闭 kdump 及释放kdump 预留的内存。
1. 执行如下命令停止 kdump-tools 服务及禁止开机启动并查看相关状态。
systemctl disable kdump-tools --nowsystemctl status kdump-toolssystemctl is-enabled kdump-tools

2. 修改
/etc/default/grub
或 /etc/default/grub.d
的配置,将 GRUB_CMDLINE_LINUX
或 GRUB_CMDLINE_LINUX_DEFAULT
中的 crashkernel 配置去掉,更新配置到启动文件。2.1 执行如下命令备份
/etc/default/grub
文件。cp /etc/default/grub /etc/default/grub.bak.$(date +%Y%m%d)
2.2 使用 vim 或其他编辑器将
/etc/default/grub
中 GRUB_CMDLINE_LINUX
或 GRUB_CMDLINE_LINUX_DEFAULT
行的 crashkernel=XXX
配置项(如下图标红内容)清除并保存。
如果
/etc/default/grub
中无 crashkernel 相关配置,请检查 /etc/default/grub.d
中的 kdump-tools.cfg
配置文件是否有 crashkernel 相关配置(如下图标红内容),若存在将 crashkernel=XXX
配置项去掉即可。
具体操作:您可以执行如下命令进入
/etc/default/grub.d/
目录,查看是否有 kdump-tools.cfg
文件、检查 kdump-tools.cfg
配置、备份文件、清除 crashkernel 相关配置并验证修改结果。cd /etc/default/grub.d/cat kdump-tools.cfgcp kdump-tools.cfg kdump-tools.cfg.bak.$(date +%Y%m%d)vim kdump-tools.cfgcat kdump-tools.cfg

2.3 执行如下命令更新 grub 配置文件。
update-grub

3. 重启服务器,验证 kdump-tools 服务是否关闭及 kdump 预留的内存是否释放。
警告:重启服务器可能会造成业务中断,请谨慎评估重启操作对业务的影响。
在重启服务器之后,可以通过执行以下命令来检查服务器是否已成功重启(通过查看 uptime 命令显示的时间是否为执行重启操作至当前时间的时间间隔来判断)、kdump 服务状态是否为 inactive (dead) 状态、crash 预留的内存大小
/sys/kernel/kexec_crash_size
是否为0、Linux 启动的命令行参数 /proc/cmdline
是否无 crashkernel 相关配置。uptimesystemctl status kdump-toolscat /sys/kernel/kexec_crash_sizecat /proc/cmdline

如果服务器不允许重启,但想释放 kdump 占用的内存,可以执行如下命令清除 kdump 服务中为 crash 预留的内存。
echo 0 >/sys/kernel/kexec_crash_size
通过如下命令验证内存地址空间不再为 kdump 预留,即返回值为0。
cat /sys/kernel/kexec_crash_size
开启 kdump 服务
使用腾讯云的 Linux 公共镜像创建的服务器默认会开启 kdump,发生 panic 时一般会在
/var/crash
下生成系统内存 dump 信息,可以利用 crash 工具分析服务器发生 panic 的原因,但开启 kdump 时会占用一部分操作系统的内存空间。不同版本的 Linux 系统对应的开启方法不同,以下列举部分 Linux 发行版的配置方法: