从内存管理理解云计算容器底层Cgroup

从内存管理理解云计算容器底层Cgroup

Cgroup 是 Control Group 的缩写,提供对一组进程,及未来子进程的资源限制、控制、统计能力,包括CPU、内存、磁盘、网络。

Cgroup 包含3个组件:

  • cgroup :一组进程,可以加上subsystem
  • subsystem :一组资源控制模块,CPU、内存…
  • hierarchy : 把一组cgroup串成树状结构,这样就能实现cgroup的继承。为什么要继承呢?就如同docker镜像的继承,站在前人的基础之上,免去重复的配置

查看Docker的Cgroup信息

导入镜像

docker load < /share/images/ubuntu.20.04.tar

创建一个容器,限制为内存为128MB

docker run -itd -m 128m ubuntu:20.04

Linux下容器的cgroup信息在 /sys/fs/cgroup/ 目录,每个目录应该都是一类资源信息,我们进行memory控制组下docker目录。

cd /sys/fs/cgroup/memory/docker/ && ll

利用容器id找到与当前容器相关的cgroup信息,容器memory的信息在 memory 目录,通过容器id可以找到容器对于的目录

cd `docker ps --no-trunc |  awk 'NR==2' | awk '{print $1}' `
ll

查看内存限制,是设置的134217728个字节,合128MB。

cat memory.limit_in_bytes

查看容器内存统计信息:

cat memory.stat

查看docker的统计信息

docker stats

可以看到内存统计信息和 docker stats 的信息是匹配的,因为这就是 docker stats 数据的来源。

总结

Cgroup的本质就是通过树形文件系统实现了cgroup hierarchy,cgroup下的目录,都是上层目录的子节点,即子cgroup,会继承上层目录的限制,代表容器的目录,就是针对当前容器的子cgroup,它限定了容器的某一类资源,正是由于这是一颗资源限制树,按不同的资源类别划分,并进行继承,所以一个容器的多种资源限制,分布在多个目录中。

移动端设备除iPad Pro外,其它移动设备仅能阅读基础的文本文字。
建议使用PC或笔记本电脑,浏览器使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。
您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关合作请扫描右侧二维码添加好友。

狐狸教程 Copyright 2021

进入全屏