kdump是Linux内核崩溃转储机制。在系统崩溃时,kdump创建一个内存映像(vmcore),可以帮助确定崩溃原因。启用kdump需要你通过kdump专用储备系统存储器的一部分。这段内存不可用作其他用途。这和以前的diskdump,netdump是同样道理.cent 5之后的版本出现的.

systemctl status kdump

[server]-[root@arrow etc]$systemctl status kdump 
● kdump.service - Crash recovery kernel arming
   Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2019-06-22 21:11:01 CST; 3h 36min ago
 Main PID: 7630 (code=exited, status=1/FAILURE)

Jun 22 21:11:01 arrow.org systemd[1]: Starting Crash recovery kernel arming...
Jun 22 21:11:01 arrow.org kdumpctl[7630]: No memory reserved for crash kernel
Jun 22 21:11:01 arrow.org kdumpctl[7630]: Starting kdump: [FAILED]
Jun 22 21:11:01 arrow.org systemd[1]: kdump.service: main process exited, code=exited, status=1/FAILURE
Jun 22 21:11:01 arrow.org systemd[1]: Failed to start Crash recovery kernel arming.
Jun 22 21:11:01 arrow.org systemd[1]: Unit kdump.service entered failed state.
Jun 22 21:11:01 arrow.org systemd[1]: kdump.service failed.

原理:

如果系统的内存 <= 8 GB 对kdump kernel不会保留任何内容;也就是说,crashkernel=auto 等于关掉了机器上的kdump功能

如果系统的内存> 8 GB 但是<= 16 GB,crashkernel=auto会保留256M,等同于crashkernel=256M

如果系统内存> 16GB, crashkernel=auto会保留512M, 等同于crashkernel=512M

如何设定 crashkernel 参数:

在 kdump 的配置中,往往困惑于 crashkernel 的设置。“crashkernel=X@Y”,X 应该多大? Y 又应该设在哪里呢?实际我们 可以完全省略“@Y”这一部分,这样,kernel 会为我们自动选择一个起始地址。而对于 X 的大小,般对 i386/x86_64 的系统, 设为 128M 即可;对于 powerpc 的系统,则要设为 256M。

解决方案:

修改/etc/grub.conf 中的内核行crashkernel=auto内容为crashkernel=128M@48M
或者 systemctl stop kdump;systemctl disable kdump 并且重启