全部產品
Search
文件中心

Elastic Compute Service:設定Linux執行個體的預留記憶體

更新時間:Jan 01, 2025

Kdump是Linux系統的一種核心崩潰轉儲機制,它允許在系統發生核心崩潰(例如核心panic)時,捕獲記憶體的轉儲資訊,從而協助事後分析故障原因。該過程需要一塊預留記憶體(稱為crashkernel記憶體),以確保即使在系統崩潰時也有足夠的記憶體來儲存核心轉儲資訊。本文介紹如何查看並調整Linux執行個體的預留記憶體。

查看系統預留記憶體

為了使Kdump服務能夠使用預留的記憶體空間,需要在grub設定檔中添加了crashkernel 參數,並分段式指定記憶體大小。

說明

grub設定檔系統預設在/etc/default/grub ;Alibaba Cloud Linux 3系統中grub配置需在/usr/share/alinux-base-setup/cmdline中配置。

系統啟動時GRUB將設定檔中的crashkernel參數傳遞給核心,核心在啟動時就知道需要預留多少記憶體空間用於Kdump服務。之後,您就可以在系統運行時檢查/proc/cmdline 來確認crashkernel參數是否已正常應用。

  1. 執行以下命令,確認系統是否已開啟crashkernel。

    cat /proc/cmdline

    如下樣本返回結果中包括了crashkernel選項,說明已開啟crashkernel。

    image

    crashkernel選項說明

    crashkernel選項參數以crashkernel=0M-2G:0M,2G-8G:192M,8G-:256M為例進行說明:

    • 如果您購買的ECS執行個體記憶體或手工配置的作業系統記憶體大小不超過2 GB,由於應用程式本身可用的記憶體數量已處於緊缺狀態,將不再為作業系統預留記憶體。因此,系統記憶體小於2 GB時,您將無法使用Kdump功能。

    • 如果您購買的ECS執行個體記憶體或手工配置的作業系統記憶體大小超過2 GB,但是不超過8 GB時,系統將預留192 MB的記憶體大小。

    • 如果您購買的ECS執行個體記憶體或手工配置的作業系統記憶體大小超過8 GB時,系統將預留256 MB的記憶體大小。

  2. 執行以下命令,查看系統預留記憶體大小。

    cat /sys/kernel/kexec_crash_size

    返回結果中的kexec crash size值表示系統預留記憶體大小,單位為位元組。如下傳回值為201326592位元組表示系統預留記憶體大小為192 MB。

    image

釋放系統預留記憶體並關閉Kdump服務

如果您的執行個體無需啟用Kdump服務,並希望將系統預留的記憶體位址空間歸還給作業系統本身,以避免資源浪費,可執行如下操作釋放系統預留記憶體並關閉Kdump服務。

重要

釋放系統預留記憶體並關閉Kdump服務,在系統故障時可能無法收集核心崩潰資訊,導致無法及時定位和修複核心相關的問題,從而影響服務的連續性和穩定性,請您謹慎操作。

Alibaba Cloud Linux/CentOS

  1. 執行以下命令,備份grub設定檔。

    • Alibaba Cloud Linux 2/CentOS。

      sudo cp /etc/default/grub /etc/default/grub.bak
    • Alibaba Cloud Linux 3。

      sudo cp /usr/share/alinux-base-setup/cmdline /usr/share/alinux-base-setup/cmdline.bak
  2. 執行以下命令,刪除crashkernel內容並儲存grub設定檔。

    • Alibaba Cloud Linux 2/CentOS。

      sudo vim /etc/default/grub

      image

      GRUB_CMDLINE_LINUX行找到crashkernel=內容,刪除crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M。修改完成後,按Esc鍵,輸入:wq儲存退出。

    • Alibaba Cloud Linux 3。

      sudo vim /usr/share/alinux-base-setup/cmdline

      image

      在設定檔中刪除crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M行,修改完成後,按Esc鍵,輸入:wq儲存退出。

  3. 執行以下命令,更新grub配置。

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    說明

    在CentOS Stream 9/AlmaLinux 9/Rocky Linux 9 等基於 RHEL 9 的發行版中,請使用sudo grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline命令更新grub配置。

  4. 執行以下命令,關閉Kdump服務。

    sudo systemctl disable kdump
    sudo systemctl stop kdump
  5. 執行以下命令,重啟系統以使更改生效。

    sudo reboot
  6. 查看kdump狀態與crashkernel參數,確認更改生效。

    1. 執行以下命令,查看kdump狀態。確認kdump狀態為 inactive (dead),即 kdump 服務已停止運行。

      sudo systemctl status kdump

      image

    2. 執行以下命令,擷取執行個體grub設定檔,確認crashkernel相關參數已刪除。

      cat /proc/cmdline

      image

Ubuntu/Debian

  1. 執行以下命令,備份grub設定檔。

    sudo cp /etc/default/grub /etc/default/grub.bak
  2. 執行以下命令,刪除crashkernel內容並儲存grub設定檔。

    sudo vim /etc/default/grub

    image

    GRUB_CMDLINE_LINUX行找到crashkernel=內容,刪除crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M。修改完成後,按Esc鍵,輸入:wq儲存退出。

  3. 執行以下命令,更新grub配置。

    sudo update-grub

    image

  4. 執行以下命令,關閉Kdump服務。

    sudo systemctl disable kdump-tools
    sudo systemctl stop kdump-tools
  5. 執行以下命令,重啟系統以使更改生效。

    sudo reboot
  6. 查看kdump狀態與crashkernel參數,確認更改生效。

    1. 執行以下命令,查看kdump狀態。確認kdump狀態為 inactive (dead),即 kdump 服務已停止運行。

      sudo systemctl status kdump

      image

    2. 執行以下命令,擷取執行個體grub設定檔,確認crashkernel相關參數已刪除。

      cat /proc/cmdline

      image

啟用系統預留記憶體和Kdump服務

如果您的執行個體需要再次使用Kdump服務捕獲記憶體轉儲資訊,可執行如下操作添加系統預留記憶體選項並啟用Kdump服務。

Alibaba Cloud Linux/CentOS

  1. 執行以下命令,備份cmdline設定檔。

    • Alibaba Cloud Linux 3。

      sudo cp /usr/share/alinux-base-setup/cmdline /usr/share/alinux-base-setup/cmdline.bak
    • Alibaba Cloud Linux 2/CentOS。

      sudo cp /etc/default/grub /etc/default/grub.bak
  2. 執行以下命令,添加crashkernel內容並儲存cmdline設定檔。

    • Alibaba Cloud Linux 3。

      sudo vim /usr/share/alinux-base-setup/cmdline

      image

      添加crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M內容。修改完成後,按Esc鍵,輸入:wq儲存退出。

    • Alibaba Cloud Linux 2/CentOS。

      sudo vim /etc/default/grub

      image

      GRUB_CMDLINE_LINUX行找到crashkernel=內容,添加crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M。修改完成後,按Esc鍵,輸入:wq儲存退出。

  3. 執行以下命令,更新grub配置。

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    說明

    在CentOS Stream 9/AlmaLinux 9/Rocky Linux 9 等基於 RHEL 9 的發行版中,請使用sudo grub2-mkconfig -o /boot/grub2/grub.cfg --update-bls-cmdline命令更新grub配置。

  4. 執行以下命令,啟用Kdump服務。

    sudo systemctl enable kdump
  5. 執行以下命令,重啟系統以使更改生效。

    sudo reboot
  6. 查看kdump狀態與crashkernel參數,確認更改生效。

    1. 執行以下命令,查看kdump狀態。確認kdump狀態為 active (exited),即 kdump 服務已正常運行。

      image

    2. 執行以下命令,擷取執行個體grub設定檔,確認crashkernel相關參數已正常添加。

      cat /proc/cmdline

Ubuntu/Debian

  1. 執行以下命令,備份grub設定檔。

    sudo cp /etc/default/grub /etc/default/grub.bak
  2. 執行以下命令,添加crashkernel內容並儲存grub設定檔。

    sudo vim /etc/default/grub

    image

    GRUB_CMDLINE_LINUX行添加crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M內容。修改完成後,按Esc鍵,輸入:wq儲存退出。

  3. 執行以下命令,更新grub配置。

    sudo update-grub
  4. 執行以下命令,啟用Kdump服務。

    sudo systemctl enable kdump-tools
    sudo systemctl start kdump-tools
  5. 執行以下命令,重啟系統以使更改生效。

    sudo reboot
  6. 查看kdump狀態與crashkernel參數,確認更改生效。

    1. 執行以下命令,查看kdump狀態。確認kdump狀態為 active (exited),即 kdump 服務已正常運行。

      image

    2. 執行以下命令,擷取執行個體grub設定檔,確認crashkernel相關參數已正常添加。

      cat /proc/cmdline