kdumpctl: No memory reserved for crash kernel.

kdump 是一种 kernel crash dump 的机制,它可以在内核 crash 时保存系统的内存信息用于后续的分析。kdump 是基于 kexec 的。
crash 是一个用于交互式地分析正在运行的 Linux 系统或者 kernel crash 后的 core dump 数据的工具。

记录一下问题及其解决方法:

在 centos7 中的 kdump.service 服务一直不能正常启动,如下:

[root@mesos-slave-dev001-cqdx ~]# systemctl status kdump.service
● kdump.service - Crash recovery kernel arming
   Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since 二 2016-07-19 14:07:37 CST; 1min 1s ago
  Process: 5416 ExecStart=/usr/bin/kdumpctl start (code=exited, status=1/FAILURE)
 Main PID: 5416 (code=exited, status=1/FAILURE)

719 14:07:35 mesos-slave-dev001-cqdx.qiyi.virtual systemd[1]: Starting Crash recovery kernel arming...
719 14:07:37 mesos-slave-dev001-cqdx.qiyi.virtual kdumpctl[5416]: No memory reserved for crash kernel.
719 14:07:37 mesos-slave-dev001-cqdx.qiyi.virtual kdumpctl[5416]: Starting kdump: [FAILED]
719 14:07:37 mesos-slave-dev001-cqdx.qiyi.virtual systemd[1]: kdump.service: main process exited, code=exited, status=1/FAILURE
719 14:07:37 mesos-slave-dev001-cqdx.qiyi.virtual systemd[1]: Failed to start Crash recovery kernel arming.
719 14:07:37 mesos-slave-dev001-cqdx.qiyi.virtual systemd[1]: Unit kdump.service entered failed state.
719 14:07:37 mesos-slave-dev001-cqdx.qiyi.virtual systemd[1]: kdump.service failed.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

需要在 kernel 启动命令行参数中添加 crashkernel 参数,并启动 kdump 服务。
一般设置为 crashkernel=auto 表示根据系统内存自动 reserve 一些内存给 kernelcrash 用,在 x86_64 系统中内存大于等于 2GB 时会 reserve 内存,最小保留内存计算方法是:160 MB + 2 bits for every 4 KB of RAM.
当然,也可以设置 crashkernel=512M 这样的固定保留内存。

用 yum install kexec-tools 安装 kdump 工具和服务
用 systemctl start kdump 命令可以启动 kdump.service,用 systemctl enable kdump 让 dump 服务在开机时自动启动。
kdump.service 相关的配置文件 /etc/kdump.conf 里面可以修改一些默认的配置,比如 dump 完成后的动作(默认是 reboot)、dump 文件存放的方式(本地目录、NFS、scp 到另外服务器等)。

现在来看问题:

其实是需要设置一下 crashkernel=auto
检查后,发现 /etc/default/grub 文件并不存在,添加该文件的配置信息,如下:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto net.ifnames=0 biosdevname=0 rhgb quiet"
GRUB_DISABLE_RECOVERY="true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后让其生效:

# grub2-mkconfig -o /boot/grub2/grub.cfg
  • 1

最后,reboot 机器即可。

[root@mesos-slave-dev001-cqdx ~]# systemctl status kdump.service
● kdump.service - Crash recovery kernel arming
   Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
   Active: active (exited) since 二 2016-07-19 14:15:16 CST; 14min ago
 Main PID: 1082 (code=exited, status=0/SUCCESS)
   Memory: 0B
   CGroup: /system.slice/kdump.service

719 14:15:13 mesos-slave-dev001-cqdx.qiyi.virtual systemd[1]: Starting Crash recovery kernel arming...
719 14:15:16 mesos-slave-dev001-cqdx.qiyi.virtual kdumpctl[1082]: kexec: loaded kdump kernel
719 14:15:16 mesos-slave-dev001-cqdx.qiyi.virtual kdumpctl[1082]: Starting kdump: [OK]
719 14:15:16 mesos-slave-dev001-cqdx.qiyi.virtual systemd[1]: Started Crash recovery kernel arming.
719 14:15:19 mesos-slave-dev001-cqdx.qiyi.virtual systemd[1]: Started Crash recovery kernel arming.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.