釋放vps的保留記憶體
Categories:
Linux 系統預設會保留一塊記憶體用於kdump,這塊記憶體的大小可以透過crashkernel參數來設定,許多應用開發者一般不會觸發核心崩潰,可以透過修改/etc/default/grub檔案來釋放出這塊記憶體。
如果不需要kdump,可以將crashkernel參數設定為0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M,這樣就可以釋放出一塊記憶體。
查看方式: cat /etc/default/grub
預設值如下:
GRUB_CMDLINE_LINUX=" vga=792 console=tty0 console=ttyS0,115200n8 net.ifnames=0 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 iommu=pt crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M crash_kexec_post_notifiers=1"
解釋下crashkernel欄位其含義是, 0-1G記憶體的主機保留0M記憶體, 1-4G記憶體的主機保留192M記憶體, 4-128G記憶體的主機保留384M記憶體, 128G以上的主機保留512M記憶體.
1G 記憶體的主機會向上劃分到1-4G檔, 保留 192MB 記憶體用於 kdump. 4G 記憶體的主機會向上劃分到4-128G檔, 保留 384MB 記憶體用於 kdump.
修改方式: sudo sed -i 's/crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M/crashkernel=0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M/' /etc/default/grub
重新啟動生效: sudo update-grub && sudo reboot
以新手學習常用的 2C1G 的 vps 為例,一個乾淨系統修改前後的記憶體空間如下, 可以看到 366MB 和 562MB 的差別還是挺大的.
# 修改前
root@iZj6c0otki9ho421eewyczZ:~# free
total used free shared buff/cache available
Mem: 707180 340772 123400 2624 358872 366408
Swap: 0 0 0
# 修改後
root@iZj6c0otki9ho421eewyczZ:~# free
total used free shared buff/cache available
Mem: 903788 341656 451380 2616 251032 562132
Swap: 0 0 0
2C4G 的 vps 修改前後的記憶體空間如下, 3.1GB 和 3.5GB 的差別.
# 修改前
root@iZj6c1prxn78ilvd2inku1Z:~# free
total used free shared buff/cache available
Mem: 3512696 377672 2870944 1260 415116 3135024
Swap: 0 0 0
# 修改後
root@iZj6c1prxn78ilvd2inku1Z:~# free
total used free shared buff/cache available
Mem: 3905912 374468 3408304 1252 270508 3531444
Swap: 0 0 0
更多關於 kdump 的介紹
Kdump 是一種核心崩潰轉儲機制,用於在 Linux 系統核心崩潰時擷取系統的記憶體狀態。它基於 kexec 技術,kexec 允許一個 Linux 核心啟動另一個 Linux 核心而不經過 BIOS 初始化程序,這使得系統可以在崩潰後快速地引導到一個新的核心(也稱為擷取核心或 crashkernel)。
當系統遇到致命錯誤並觸發了核心錯誤(kernel panic)時,目前正在執行的核心(也稱為主核心)會使用 kexec 加載預先準備好的擷取核心,並將系統的記憶體內容儲存到一個指定的位置,如磁碟上的特定分割區或者透過網路發送到另一台機器。這個儲存下來的記憶體映像檔(vmcore 或者 kdump 檔案)可以被用來進行事後分析,幫助開發者或系統管理員找出導致崩潰的原因。
為了啟用 kdump 功能,通常需要在系統啟動設定中預留一部分記憶體給擷取核心,這樣即使主核心崩潰,這部分記憶體也能保持不受影響,從而保證擷取核心能夠正常工作並完成記憶體轉儲的任務。設定和使用 kdump 通常涉及修改引導載入程式設定、調整核心參數以及設定適當的儲存位置來儲存 vmcore 檔案。