解決阿里云服務(wù)器內(nèi)存不足量的問題

阿里云服務(wù)器安裝 Centos 系統(tǒng)后使用 free 命令查看內(nèi)存大小往往會(huì)發(fā)現(xiàn)比所購買配置的標(biāo)稱內(nèi)存要小很多,2G 內(nèi)存的查出來只有 1756M 左右。

如下圖所示(2G 內(nèi)存):


查看可用內(nèi)存

我以為是內(nèi)存的存儲(chǔ)和硬盤的存儲(chǔ)一樣,需要部分內(nèi)存容量用于存儲(chǔ)系統(tǒng)空間,但是內(nèi)存中也妹有系統(tǒng)啊。。。。。。。

問題原因


使用命令 dmidecode 查看底層硬件信息,可以看到我的 2G 內(nèi)存的服務(wù)器是分配足了 2048M 內(nèi)存的。


查看系統(tǒng)底層內(nèi)存

但是為什么使用 free 命令看到的內(nèi)存變少了呢?查閱資料找到了答案:free 命令看到的是伙伴系統(tǒng)管理的內(nèi)存,這部分內(nèi)存是不包括 OS 內(nèi)核一些基本數(shù)據(jù)結(jié)構(gòu)消耗以及內(nèi)核預(yù)留內(nèi)存的。

使用命令 dmesg | grep -i memory 查看內(nèi)核預(yù)留內(nèi)存,注意到如下部分:


查看內(nèi)存分配情況

為 crashkernel 預(yù)留了 161M 的內(nèi)存,很明顯這就是導(dǎo)致我們“內(nèi)存不足量”的罪魁禍?zhǔn)住?/p>

阿里云提供的 Centos 系統(tǒng)鏡像默認(rèn)開啟了 kdump 服務(wù),當(dāng) Linux 內(nèi)核出現(xiàn)了故障時(shí) kdump 會(huì)協(xié)助產(chǎn)生一個(gè) dump 文件,記錄下此時(shí)的內(nèi)存運(yùn)行參數(shù)等信息,便于用戶后續(xù)對(duì)內(nèi)核問題的定位分析。而上面提到的“為 crashkernel 預(yù)留的內(nèi)存”就是用于這一服務(wù)的,也就是導(dǎo)致我們“內(nèi)存不足量”的元兇。

這一服務(wù)對(duì)于那些注重安全的大公司來說可能會(huì)有些用處,但我們這種個(gè)人用途的低配置服務(wù)器也開著的話就沒有什么必要了,本身內(nèi)存就不大,還要為這服務(wù)分出去一部分不能用,想想還是有點(diǎn)浪費(fèi)的。

解決方案

既然問題是由于系統(tǒng)為 kdump 服務(wù)預(yù)留了一部分內(nèi)存導(dǎo)致的,那我們把 kdump 服務(wù)關(guān)了就行了。
在 CentOS 中,可以使用 yum 或 dnf 包管理工具來卸載 kdump 相關(guān)的軟件包,并清理它們的依賴項(xiàng)。

  1. 卸載 kdump 工具:kexec-tools 是 CentOS 上提供 kdump 功能的包。
sudo yum remove kexec-tools
  1. 清理不再需要的依賴包
sudo yum autoremove

在執(zhí)行上述命令后,可以檢查是否成功卸載了 kdump 工具和相關(guān)的依賴包:

rpm -q kexec-tools

這個(gè)命令會(huì)檢查 kexec-tools 是否仍然安裝在系統(tǒng)中。如果顯示 package kexec-tools is not installed,則表示卸載成功。

然后編輯 /etc/default/grub 文件,將其中的 crashkernel=xxx 字段全部刪掉,我這里的修改情況如下:

# 待修改的一行配置
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rhgb quiet net.ifnames=0 console=tty0 console=ttyS0,115200n8 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295"

# 修改后的配置
GRUB_CMDLINE_LINUX="spectre_v2=retpoline rhgb quiet net.ifnames=0 console=tty0 console=ttyS0,115200n8 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295"

CentOS 使用 grub2-mkconfig 來生成 GRUB 配置文件,修改完之后執(zhí)行 grub2-mkconfig 更新 grub 引導(dǎo)文件,以下是更新 GRUB 引導(dǎo)配置文件的步驟:
在執(zhí)行上述步驟之前,可以檢查 GRUB 版本以確保系統(tǒng)使用的是 GRUB 2:

grub2-install --version

步驟 1: 生成新的 GRUB 配置文件

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

如果你的系統(tǒng)是基于 UEFI 的,使用以下命令:

sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

步驟 2: 確認(rèn)并重啟
生成新的 GRUB 配置文件后,建議重啟系統(tǒng)以確保更改生效:

sudo reboot

重啟一下服務(wù)器就可以啦!

如下圖所示,重啟后可用內(nèi)存變成了 1963M:


處理后可用內(nèi)存情況

但是并沒有完全達(dá)到2048M,說明還有一些程序占用了內(nèi)存,但是基本可以了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容