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參數是否已正常應用。
執行以下命令,確認系統是否已開啟crashkernel。
cat /proc/cmdline如下樣本返回結果中包括了
crashkernel選項,說明已開啟crashkernel。
執行以下命令,查看系統預留記憶體大小。
cat /sys/kernel/kexec_crash_size返回結果中的
kexec crash size值表示系統預留記憶體大小,單位為位元組。如下傳回值為201326592位元組表示系統預留記憶體大小為192 MB。
釋放系統預留記憶體並關閉Kdump服務
如果您的執行個體無需啟用Kdump服務,並希望將系統預留的記憶體位址空間歸還給作業系統本身,以避免資源浪費,可執行如下操作釋放系統預留記憶體並關閉Kdump服務。
釋放系統預留記憶體並關閉Kdump服務,在系統故障時可能無法收集核心崩潰資訊,導致無法及時定位和修複核心相關的問題,從而影響服務的連續性和穩定性,請您謹慎操作。
Alibaba Cloud Linux/CentOS
執行以下命令,備份grub設定檔。
Alibaba Cloud Linux 2/CentOS。
sudo cp /etc/default/grub /etc/default/grub.bakAlibaba Cloud Linux 3。
sudo cp /usr/share/alinux-base-setup/cmdline /usr/share/alinux-base-setup/cmdline.bak
執行以下命令,刪除
crashkernel內容並儲存grub設定檔。Alibaba Cloud Linux 2/CentOS。
sudo vim /etc/default/grub
在
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
在設定檔中刪除
crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M行,修改完成後,按Esc鍵,輸入:wq儲存退出。
執行以下命令,更新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配置。執行以下命令,關閉Kdump服務。
sudo systemctl disable kdump sudo systemctl stop kdump執行以下命令,重啟系統以使更改生效。
sudo reboot查看kdump狀態與crashkernel參數,確認更改生效。
執行以下命令,查看kdump狀態。確認kdump狀態為
inactive (dead),即kdump服務已停止運行。sudo systemctl status kdump
執行以下命令,擷取執行個體grub設定檔,確認crashkernel相關參數已刪除。
cat /proc/cmdline
Ubuntu/Debian
執行以下命令,備份grub設定檔。
sudo cp /etc/default/grub /etc/default/grub.bak執行以下命令,刪除
crashkernel內容並儲存grub設定檔。sudo vim /etc/default/grub
在
GRUB_CMDLINE_LINUX行找到crashkernel=內容,刪除crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M。修改完成後,按Esc鍵,輸入:wq儲存退出。執行以下命令,更新grub配置。
sudo update-grub
執行以下命令,關閉Kdump服務。
sudo systemctl disable kdump-tools sudo systemctl stop kdump-tools執行以下命令,重啟系統以使更改生效。
sudo reboot查看kdump狀態與crashkernel參數,確認更改生效。
執行以下命令,查看kdump狀態。確認kdump狀態為
inactive (dead),即kdump服務已停止運行。sudo systemctl status kdump
執行以下命令,擷取執行個體grub設定檔,確認crashkernel相關參數已刪除。
cat /proc/cmdline
啟用系統預留記憶體和Kdump服務
如果您的執行個體需要再次使用Kdump服務捕獲記憶體轉儲資訊,可執行如下操作添加系統預留記憶體選項並啟用Kdump服務。
Alibaba Cloud Linux/CentOS
執行以下命令,備份cmdline設定檔。
Alibaba Cloud Linux 3。
sudo cp /usr/share/alinux-base-setup/cmdline /usr/share/alinux-base-setup/cmdline.bakAlibaba Cloud Linux 2/CentOS。
sudo cp /etc/default/grub /etc/default/grub.bak
執行以下命令,添加
crashkernel內容並儲存cmdline設定檔。Alibaba Cloud Linux 3。
sudo vim /usr/share/alinux-base-setup/cmdline
添加
crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M內容。修改完成後,按Esc鍵,輸入:wq儲存退出。Alibaba Cloud Linux 2/CentOS。
sudo vim /etc/default/grub
在
GRUB_CMDLINE_LINUX行找到crashkernel=內容,添加crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M。修改完成後,按Esc鍵,輸入:wq儲存退出。
執行以下命令,更新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配置。執行以下命令,啟用Kdump服務。
sudo systemctl enable kdump執行以下命令,重啟系統以使更改生效。
sudo reboot查看kdump狀態與crashkernel參數,確認更改生效。
執行以下命令,查看kdump狀態。確認kdump狀態為
active (exited),即kdump服務已正常運行。
執行以下命令,擷取執行個體grub設定檔,確認crashkernel相關參數已正常添加。
cat /proc/cmdline
Ubuntu/Debian
執行以下命令,備份grub設定檔。
sudo cp /etc/default/grub /etc/default/grub.bak執行以下命令,添加
crashkernel內容並儲存grub設定檔。sudo vim /etc/default/grub
在
GRUB_CMDLINE_LINUX行添加crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:384M內容。修改完成後,按Esc鍵,輸入:wq儲存退出。執行以下命令,更新grub配置。
sudo update-grub執行以下命令,啟用Kdump服務。
sudo systemctl enable kdump-tools sudo systemctl start kdump-tools執行以下命令,重啟系統以使更改生效。
sudo reboot查看kdump狀態與crashkernel參數,確認更改生效。
執行以下命令,查看kdump狀態。確認kdump狀態為
active (exited),即kdump服務已正常運行。
執行以下命令,擷取執行個體grub設定檔,確認crashkernel相關參數已正常添加。
cat /proc/cmdline