中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

配置kdump服务

内核问题往往不能直接通过GDB等调试工具对程序进行调试,需要先生成vmcore文件,通过调试vmcore,进行问题的定位。

kdump是在系统崩溃、死锁或死机的时候用来转储内存运行参数的一个工具和服务。只有配置了kdump服务,vmcore文件才会生成。下面基于鲲鹏平台在openEuler 22.03 LTS和CentOS 7.6操作系统下介绍kdump的配置方法。

  1. 安装kdump。
    • openEuler 22.03 LTS已经内置并启用了kdump,可以不用单独安装。
    • CentOS 7.6在安装时可选是否启用kdump功能。如果未启用则需重新安装kdump所依赖的包。
      1
      yum install kexec-tools -y
      
  2. (可选)配置crashkernel大小。

    kdump预留内存参数必须添加到内核启动参数中,配置文件路径为:

    • UEFI引导模式:“/boot/efi/EFI/openEuler/grub.cfg”
    • legacy引导模式:“/boot/grub2/grub.cfg”

    openEuler发布版本中默认已经添加,可以根据实际使用情况调整。添加和修改启动参数后,重启系统使配置生效。

    • 对于openEuler系统,“crashkernel”的参数值不支持配置为“auto”,kdump预留内存参数格式如表1所示。
      表1 kdump预留内存参数(openEuler操作系统)

      内核启动参数

      描述

      默认值

      配置说明

      crashkernel=x

      在4G以下的物理内存预留x大小的内存给kdump使用。

      x86版本默认配置512M

      该配置方法只在4G以下内存预留,必须保证4G以下连续可用内存足够预留。

      crashkernel=x@y

      在y起始地址预留x大小的内存给kdump使用。

      未使用

      需要确保y起始地址的x大小的内存未被其他模块预留。

      crashkernel=x,high

      在4G以下的物理内存中预留256M内存,在4G以上预留x大小内存给kdump使用。

      Arm64版本默认配置1024M,high

      需要确保4G以下有256M连续可用的物理内存,4G以上有连续的x大小的连续物理内存。实际预留内存大小为256M+x。

      crashkernel=x,low crashkernel=y,high

      在4G以下的物理内存中预留x大小,在4G以上预留y大小内存给kdump使用。

      未使用

      需要确保4G以下有连续的x大小物理内存,4G以上有连续的y大小物理内存。

    • 对于CentOS 7.6操作系统,“crashkernel”参数值可以配置为“auto”,表示可以根据系统内存来配置crashkernel大小。
      • 如果系统的内存小于等于8GB,对kdump kernel不会保留任何内容(等同于关闭kdump)。
      • 如果系统的内存大于8GB但小于等于16GB,crashkernel=auto会保留256M,等同于crashkernel=256M。
      • 如果系统内存大于16GB,crashkernel=auto会保留512M,等同于crashkernel=512M。

    crashkernel的大小一般为2的整数次幂大小,如128M,256M,512M,768M,1024M,2048M等。配置crashkernel大小有两种方式:

    方式一:通过修改“/etc/default/grub”文件,此方法会使所有内核的配置都修改。
    1. 打开grub文件。
      vi /etc/default/grub
    2. “i”进入编辑模式,添加或修改GRUB_CMDLINE_LINUX中的“crashkernel”参数,此处以修改为“1024M,high”为例。
      crashkernel=1024M,high

      配置的crashkernel大小需要根据实际情况调整。太大可能导致内核无法分配crashkernel所需的空间,进而导致kdump服务启动失败,太小则可能导致捕获内核无法正常启动。

    3. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。
    4. 使用grub2-mkconfig命令重新生成系统grub.cfg文件。
      grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg

    方式二:通过修改grub.cfg文件中相应内核的grub启动命令。

    1. 打开grub.cfg文件。
      vi /boot/efi/EFI/openEuler/grub.cfg
    2. “i”进入编辑模式,找到目标内核的grub启动命令,添加或修改“crashkernel”参数。

      例如下图中的“'openEuler (5.10.0-60.18.0.50.oe2203.aarch64) 22.03 LTS'”的配置项,找到linux命令中的“crashkernel”参数,如果没有则自行添加该参数。

      crashkernel=1024M,high

    3. “Esc”键退出编辑模式,输入:wq!并按“Enter”键保存退出文件。
    4. 重启服务器,使配置生效。
  3. 验证kdump是否开启。
    1. 重启服务器,查看当前kdump的配置。
      1
      2
      3
      systemctl start kdump.service
      systemctl enable kdump.service
      systemctl status kdump.service
      

      如出现“No memory reserved for crash kernel”报错信息如下图所示,则可能是因为crashkernel配置不当,预留空间不足以crashkernel使用,此时需要重新修改crashkernel参数。

    2. 验证kdump,输入下述命令会导致Linux内核崩溃,并且kdump文件生成到默认目录“/var/crash”下,若成功生成相关vmcore文件,则kdump已成功开启。
      1
      2
      echo 1 > /proc/sys/kernel/sysrq
      echo c > /proc/sysrq-trigger
      
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词