Alibaba Cloud Linux 3系統中,通過free
命令查看容器里的內存使用高于宿主機系統中的內存。本文介紹這種情況的可能原因和解決方案。
問題描述
查看Alibaba Cloud Linux 3鏡像的容器中的內存使用,發現其高于Alibaba Cloud Linux 3系統宿主機的內存,該情況與理論預期不符。
問題原因
當前使用的內存計算公式為mem_used = kb_main_total - kb_main_free - kb_main_cached - kb_main_buffers
,由于沒有正確處理共享內存(shmem),導致容器中的內存使用計算不準確。具體原因說明:
mem_used
:系統中實際使用的內存大小。kb_main_total
:系統中所有可用的內存大小。kb_main_free
:系統中未被使用的空閑內存大小。kb_main_cached
:系統中被緩存的內存大小。通常用于加速數據訪問,例如文件系統緩存。kb_main_buffers
:系統中被用作緩沖區的內存大小。通常用于臨時存儲數據,例如網絡數據包。
共享內存(shmem)作為一種內存區域,具有匿名頁(Anonymous Pages)和Page Cache的性質,在未配置Swap空間時無法被當作閑置內存回收,應該將shmem
視為已使用的內存,而不是閑置內存,因此計算mem_used
時,不應該被減去,這樣可以更準確地反映系統中實際使用的內存情況。
解決方案
在宿主機上,執行以下命令,將procps-ng
版本更新至3.3.15-14.0.3.al8或更高版本。
sudo yum update procps-ng
通過更新procps-ng
版本使內存計算公式調整生效,確保上述問題已修復。如需了解procps
的更多信息,請參見procps-ng>procps。