• 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.
    

    需要在 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

    然后让其生效:

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

    最后,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.
  • 相关阅读:
    Think in java 4th读书笔记__last update20151130
    Angular学习笔记--last_update 20151106
    程序员技术练级攻略(转载)
    缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题(转载)
    简单理解 RPC(转载)
    Redis 为什么使用单进程单线程方式也这么快(转载)
    redis详解(三)-- 面试题(转载)
    redis应用-sortedset实现排行榜(转载)
    LRU原理和Redis实现——一个今日头条的面试题(转载)
    全面理解Java内存模型(JMM)及volatile关键字(转载)
  • 原文地址:https://www.cnblogs.com/qianggezhishen/p/7349326.html
Copyright © 2020-2023  润新知