ECS內(nèi)存使用常見問題
【問題背景】
在ECS的使用中會出現(xiàn)一些關于內(nèi)存的使用問題,例如:
1、我的ECS實際可以使用的總內(nèi)存(MemTotal)與購買的規(guī)格不一致
2、free查到的服務器內(nèi)存已使用數(shù)量跟top顯示的進程使用內(nèi)存不一致
上述問題中通常為系統(tǒng)設置產(chǎn)生,該文檔對以上問題場景進行分析和處理。
【問題分析與處理】
問題一:
我的ECS實際可以使用的總內(nèi)存(MemTotal)與購買的規(guī)格不一致
問題現(xiàn)象
從free和/proc/meminfo中看到的總內(nèi)存小于購買的規(guī)格內(nèi)存(實際ECS規(guī)格為2G)
問題分析
1、可以通過dmesg查看系統(tǒng)啟動時內(nèi)存分配情況
# dmesg | grep Memory
如上圖所示,實際總內(nèi)存為2096440KB,其中可用內(nèi)存為1860840KB,absent 392KB,reserved 235408KB。
kdump使用kexec引導到第二個內(nèi)核(捕獲內(nèi)核),第二個內(nèi)核位于第一 個內(nèi)核無法訪問的系統(tǒng)內(nèi)存的reserved部分中,第二個內(nèi)核捕獲崩潰的內(nèi)核內(nèi)存的內(nèi)容(崩潰轉(zhuǎn)儲)并保存,且reserved?內(nèi)存屬于第二內(nèi)核,并且永遠不會被釋放或交換。
系統(tǒng)可用內(nèi)存的計算方式為:
available =?物理內(nèi)存?– absent – reserved
確認是否配置crashkernel,可以通過查看/proc/cmd
# cat /proc/cmdline
如上圖所示可以確認crashkernel已開啟,crashkernel中內(nèi)存包含在reserved中。
確認不需要kdump可以釋放該部分內(nèi)存。釋放crashkernel使用的內(nèi)存會導致kdump無法使用。
操作步驟
1、修改grub配置,刪除crashkernel配置項。
# cp /etc/default/grub /etc/default/grub.bak
打開/etc/default/grub找到GRUB_CMDLINE_LINUX行,將crashkernel=auto(crashkernel的值可能為具體的值或者范圍,以實際參數(shù)設置為準)參數(shù)刪除。
2、使用grub2-mkconfig?命令重新生成cfg文件
# grub2-mkconfig -o /boot/grub2/grub.cfg
3、重啟服務器
說明
步驟2中如果出現(xiàn):error: environment block too small
則運行以下命令后:
# mv /boot/grub2/grubenv /grubenv.bak
# grub2-mkconfig -o /boot/grub2/grub.cfg
問題二:
free查到的服務器內(nèi)存已使用數(shù)量跟top顯示的進程使用內(nèi)存不一致
問題現(xiàn)象
在4U8G的linux彈性云服務器,執(zhí)行free –lh?命令后發(fā)現(xiàn)顯示已使用內(nèi)存5.9G,使用率將近78%,top查詢的內(nèi)存使用率只有不到10%,與free –lh的結(jié)果不匹配。
問題分析
在某些場景和應用中需要在系統(tǒng)內(nèi)配置hugepage(大頁內(nèi)存)和共享內(nèi)存,而大頁內(nèi)存和共享內(nèi)存體現(xiàn)在free的結(jié)果中的used但是不會計算在進程的使用內(nèi)存中,針對此類問題可以從這個方向進行定位。
我們可以通過atop命令在MEM行可以看到內(nèi)存的分配詳情,如下圖標記處可以看到hptot(hugepage total)項為4.9G。
這部分內(nèi)存,即被“大內(nèi)存頁”占用的這些存儲器永遠不會被交換出內(nèi)存。它會一直保留除非修改了配置。
大頁內(nèi)存的詳情可以通過/proc/meminfo查看
# cat /proc/meminfo |grep Huge
可以看到開啟了Huge,每個大頁內(nèi)存的大小是2048kB,大頁內(nèi)存的數(shù)據(jù)是2520個,加起來一共使用了5G內(nèi)存。free –lh顯示的5.9G的內(nèi)存使用量,減去大頁內(nèi)存5G,實際使用的是0.9G.使用率跟top查詢的結(jié)果相匹配。
大頁內(nèi)存在某些應用是必要的配置,是否取消大頁內(nèi)存需要根據(jù)實際場景進行決定。大頁內(nèi)存的設置可以通過內(nèi)核參數(shù)vm.nr_hugepages進行設置。
說明:
1、HugePages?是?Linux?操作系統(tǒng)的一個內(nèi)核特性,讓操作系統(tǒng)可以支持現(xiàn)代硬件架構(gòu)的大頁面容量功能。通過啟用?HugePages?并使用大頁面,可以用一個頁表條目代表一個大頁面,而不是使用許多條目代表較小的頁面,從而可以管理更多內(nèi)存,減少操作系統(tǒng)對頁面狀態(tài)的維護并提高?TLB?緩存命中率。在?Linux?中,Hugepage默認大小為?2 MB。
2、共享內(nèi)存是多個進程間共同地使用同一段物理內(nèi)存空間,它是通過將同一段物理內(nèi)存映射到不同進程的 虛擬空間來實現(xiàn)的。由于映射到不同進程的虛擬空間中,不同進程可以直接使用,不需要像消息隊列那樣進行復制,所以共享內(nèi)存的效率很高。
列出共享內(nèi)存的使用
# ipcs –m
共享內(nèi)存的設置可以通過內(nèi)核參數(shù)kernel.shmall進行設置
Linux 彈性云服務器 ECS
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。