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),导致容器中的内存使用计算不准确。具体原因说明:
共享内存(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。
文档内容是否对您有帮助?