V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
zhwguest
V2EX  ›  云计算

请教一个 lxc 容器的内存使用问题

  •  
  •   zhwguest · 341 天前 · 1411 次点击
    这是一个创建于 341 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有一台比较低配置的闲置云主机,里面运行 lxc 容器。

    我今天心血来潮,看了一下内存使用情况,觉得有些不可理解。

    从宿主机看:

    root@ecs-yun31:~$ free -m
                   total        used        free      shared  buff/cache   available
    Mem:            1685        1027          94         167         563         307
    Swap:              0           0           0
    

    从容器里看:

    user@lxc01:~$ free -m
                   total        used        free      shared  buff/cache   available
    Mem:            1685         493         835         164         355        1191
    Swap:              0           0           0
    

    是的,没有看错,宿主机内存不到 2G ,总数匹配上了。但是容器里面看到的 available 的内存是 1.2G ,而在宿主机看到的 available 的内存只有 300M 。 也就是说,感觉容器预留了几百兆的内存,这些内存没有被容器使用,但是却被预留了,从宿主机的角度看,这是不能被使用了的。 感觉这样是非常浪费的,不合理的。不知道是什么地方配置了这种行为呢?按说和宿主机一起共享内存多好,大家都有得用。

    3 条回复    2024-01-01 20:48:01 +08:00
    iBugOne
        1
    iBugOne  
       341 天前   ❤️ 6
    实际情况是,容器里的 available 是假的,是通过 total / used / shared / buff/cache 等算出来的,而容器里看不到容器外的进程,所以容器里看到的 used / shared / buff/cache 就比容器外要少,算出来的 available 就更多,这样就出现了偏差,因此容器里的 available (还有 free )都是绝对不能信的。

    底层原因是,free 命令是读 /proc/meminfo 的,而这个古老的 procfs 接口并没有很好地兼容现代的容器技术。如果你的 lxc/lxd 够新的话,你就能看到容器里的 /proc/meminfo 是一个 fuse.lxcfs mount 在上面的,lxc 通过这个方式覆盖容器里看到的 /proc/meminfo (以及 procfs 下的其他一堆“文件”),能让容器里看到的这些系统资源使用情况更加准确。如果要看整个系统的资源使用情况,请从 host 上直接看,不要纠结容器里显示的东西。
    zhwguest
        2
    zhwguest  
    OP
       341 天前
    @iBugOne 太感谢了~~~
    julyclyde
        3
    julyclyde  
       336 天前
    可以用 lxcfs
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6121 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:12 · PVG 10:12 · LAX 18:12 · JFK 21:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.