文档中心>云服务器>运维指南>环境配置>Linux 实例如何关闭或开启 kdump 服务

Linux 实例如何关闭或开启 kdump 服务

最近更新时间:2025-01-20 11:50:12

我的收藏
免责声明:本文档可能包含第三方产品信息,该信息仅供参考。腾讯云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

概述

kdump 是 Linux 系统的一种内核崩溃(kernel crash)转储机制。当系统出现内核崩溃时,它能够捕获崩溃时的内存转储信息,以便后续分析和排除故障。本文主要介绍 Linux 系统的云服务器 CVM 实例如何关闭或开启 kdump 服务。
说明:关于 kdump 服务的介绍,请参见 kdump 介绍文档

关闭 kdump 服务及释放 kdump 预留的内存

Linux 系统启动时,kdump 会配置一块内核内存区域作为“保留内存”,该保留内存区域专门用于在系统崩溃时启动第二个内核。若业务对分析内核崩溃原因不太关注,想要释放这部分预留内存,可以考虑关闭 kdump。
注意:关闭 kdump 后出现内核崩溃存在无法诊断崩溃原因的风险。
不同的 Linux 发行版对应的关闭方法不同,本文列举了部分操作系统关闭 kdump 及释放 kdump 预留的内存的方法。
CentOS/TencentOS 公共镜像
OpenCloudOS 公共镜像
Ubuntu/Debian 公共镜像
以 CentOS 7/CentOS 8/TencentOS 2/TencentOS 3/TencentOS 4 操作系统为例,可参考如下步骤关闭 kdump 及释放 kdump 预留的内存。
1. 执行如下命令停止 kdump 服务及禁止开机启动并查看相关状态。
systemctl disable kdump --now
systemctl status kdump.service
systemctl 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 相关配置。
uptime
systemctl status kdump.service
cat /sys/kernel/kexec_crash_size
cat /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 --now
systemctl status kdump
systemctl 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/grubGRUB_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 相关配置。
uptime
systemctl status kdump.service
cat /sys/kernel/kexec_crash_size
cat /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 --now
systemctl status kdump-tools
systemctl is-enabled kdump-tools

2. 修改 /etc/default/grub/etc/default/grub.d 的配置,将 GRUB_CMDLINE_LINUXGRUB_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/grubGRUB_CMDLINE_LINUXGRUB_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.cfg
cp kdump-tools.cfg kdump-tools.cfg.bak.$(date +%Y%m%d)
vim kdump-tools.cfg
cat 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 相关配置。
uptime
systemctl status kdump-tools
cat /sys/kernel/kexec_crash_size
cat /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 发行版的配置方法: