释放Linux服务器的预留内存

更新时间:
复制 MD 格式

KdumpLinux的内核崩溃转储机制,能在系统崩溃(如内核panic)时捕获内存信息,便于事后故障分析,该机制需要预留内存(称为crashkernel)来保存转储信息。如果您的Linux服务器内存较小,可参考本文档关闭kdump释放预留内存,提高内存的利用率。

操作步骤

重要

释放系统预留内存并关闭Kdump服务,在系统故障时可能无法收集内核崩溃信息,导致无法及时定位和修复内核相关的问题,从而影响服务器的稳定性,请您谨慎操作。

  1. 查看系统预留内存。

    1. 远程连接Linux服务器

    2. 执行以下命令,确认系统是否已开启crashkernel。

      cat /proc/cmdline

      如果返回结果中包括了crashkernel选项,说明已开启crashkernel。

      [xxx ~]$ cat /proc/cmdline
      BOOT_IMAGE=(hd0,gpt3)/boot/vmlinuz-5.10.134-16.3.al8.x86_64 root=UUID-d8aa6372-11c4-4d2d-ae0a-177d968a6c3c ro crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M cryptomgr.notests cgroup.memory=nokmem rcupdate.rcu_cpu_stall_timeout=300 vring_force_dma_api rhgb quiet biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8 noibrs e.io_timeout=4294967295 nvme_core.admin_timeout=4294967295
    3. 执行以下命令,查看系统预留内存大小。

      cat /sys/kernel/kexec_crash_size

      回显信息表示系统预留内存大小为201326592 B,即192 MiB。

      201326592
  2. 释放系统预留内存并关闭Kdump服务。

    1. 执行以下命令,备份grub配置文件。

      sudo cp /etc/default/grub /etc/default/grub.bak
    2. 执行以下命令,删除crashkernel配置。

      1. Alibaba Cloud Linux/CentOS

        sudo grubby --update-kernel=ALL --remove-args="crashkernel"
      2. Ubuntu/Debian

        sudo sed -i 's/crashkernel=[^[:space:]]*[[:space:]]*//g' /etc/default/grub
    3. 执行以下命令,更新grub配置。

      • Alibaba Cloud Linux/CentOS

        sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      • Ubuntu/Debian

        sudo update-grub
    4. 执行以下命令,关闭Kdump服务并禁止开启自启动。

      • Alibaba Cloud Linux/CentOS

        sudo systemctl stop kdump
        sudo systemctl disable kdump
      • Ubuntu/Debian

        sudo systemctl stop kdump-tools
        sudo systemctl disable kdump-tools
    5. 执行以下命令,重启系统以使更改生效。

      sudo reboot
  3. 验证结果。

    1. 远程连接Linux服务器

    2. 执行以下命令,查看kdump状态。确认kdump状态为 inactive (dead),即 kdump 服务已停止运行。

      • Alibaba Cloud Linux/CentOS

        sudo systemctl status kdump

        命令返回结果中,Active 状态为 inactive (dead),表示 kdump 服务未运行。

        [adm:              jawoZ ~]$ sudo systemctl status kdump
        ● kdump.service - Crash recovery kernel arming
           Loaded: loaded (/usr/lib/systemd/system/kdump.service; disabled; vendor preset: enabled)
           Active: inactive (dead)
      • Ubuntu/Debian

        sudo systemctl status kdump-tools
        sudo systemctl status kdump-tools
        o kdump-tools.service - Kernel crash dump capture service
             Loaded: loaded (/lib/systemd/system/kdump-tools.service; disabled; preset: enabled)
             Active: inactive (dead)
    3. 执行以下命令,查看grub配置文件。

      cat /proc/cmdline

      如果回显信息中不显示crashkernel配置,表示删除crashkernel配置已生效。

      [acxxxuoZ ~]$ cat /proc/cmdline
      BOOT_IMAGE=/boot/vmlinuz-3.10.0-957.21.3.el7.x86_64 root=UUID=1114fe9e-2309-4580-b183-d778e6d97397 ro rhgb quiet idle=halt biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200n8 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295
    4. 执行以下命令,查看预留内存大小。

      cat /sys/kernel/kexec_crash_size

      如果回显信息显示0,表示系统预留内存已释放。