• 3.Docker基础Cgroup


    可配额/可度量:Docker基础Cgroup

    在一个容器,如果不做任何资源限制,则允许其占用无限大的内存空间,有时候会因为代码Bug程序会一直申请内存,直到把宿主机内存占满;为避免此类状况的出现,宿主机内有必要对容器进行资源分配限制,比如CPU、内存等;Linux Cgroup的全程是Linux Control Groups,它最主要的作用是限制一个进程能够使用的资源上线,包括CPU、内存、磁盘、网络带宽等等。此外还能够对进程进行优先级设置,以及进程挂起和恢复等操作。

    docker pause就是基于Cgroup的进程挂起操作

    验证系统cgroups

    Cgroup在内核层默认已经开启

    Centos

    ]# cat /boot/config-4.4.206-1.el7.elrepo.x86_64 | grep CGROUP 
    CONFIG_CGROUPS=y
    # CONFIG_CGROUP_DEBUG is not set
    CONFIG_CGROUP_FREEZER=y
    CONFIG_CGROUP_PIDS=y
    CONFIG_CGROUP_DEVICE=y
    CONFIG_CGROUP_CPUACCT=y
    CONFIG_CGROUP_CPUACCT=y
    CONFIG_CGROUP_PERF=y
    CONFIG_CGROUP_SCHED=y
    CONFIG_BLK_CGROUP=y
    # CONFIG_DEBUG_BLK_CGROUP is not set
    CONFIG_CGROUP_WRITEBACK=y
    CONFIG_NETFILTER_XT_MATCH_CGROUP=m
    CONFIG_NET_CLS_CGROUP=y
    CONFIG_CGROUP_NET_PRIO=y
    CONFIG_CGROUP_NET_CLASSID=y
    
    
    # cat /boot/config-3.10.0-957.el7.x86_64 | grep CGROUP 
    CONFIG_CGROUPS=y
    # CONFIG_CGROUP_DEBUG is not set
    CONFIG_CGROUP_FREEZER=y
    CONFIG_CGROUP_PIDS=y
    CONFIG_CGROUP_DEVICE=y
    CONFIG_CGROUP_CPUACCT=y
    CONFIG_CGROUP_HUGETLB=y
    CONFIG_CGROUP_PERF=y
    CONFIG_CGROUP_SCHED=y
    CONFIG_BLK_CGROUP=y
    # CONFIG_DEBUG_BLK_CGROUP is not set
    CONFIG_NETFILTER_XT_MATCH_CGROUP=m
    CONFIG_NET_CLS_CGROUP=y
    CONFIG_NETPRIO_CGROUP=y
    

    Ubantu

    ]# cat /boot/config-4.15.0-55-generic | grep CGROUP
    CONFIG_CGROUPS=y
    CONFIG_BLK_CGROUPS=y
    # CONFIG_CGROUP_DEBUG_BLK_CGROUP is not set
    CONFIG_CGROUP_WRITEBACK=y
    CONFIG_CGROUP_SCHED=y
    CONFIG_CGROUP_PIDS=y
    CONFIG_CGROUP_RDMA=y
    CONFIG_CGROUP_FREEZER=y
    CONFIG_CGROUP_HUGETLB=y
    CONFIG_CGROUP_DEVICE=y
    CONFIG_CGROUP_CPUACCT=y
    CONFIG_CGROUP_PERF=y
    CONFIG_CGROUP_BPRF=y
    # CONFIG_CGROUP_DEBUG is not set
    CONFIG_SOCK_CGROUP_DATA=y
    CONFIG_NETFILTER_XT_MATCH_CGROUP=m
    CONFIG_NET_CLS_CGROUP=y
    CONFIG_CGROUP_NET_PRIO=y
    CONFIG_CGROUP_NET_CLASSID=y
    

    cgroup中内存模块:

    ]#  cat /boot/config-4.4.206-1.el7.elrepo.x86_64  | grep MEM | grep CG
    CONFIG_MEMCG=y
    CONFIG_MEMCG_SWAP=y
    CONFIG_MEMCG_SWAP_ENABLED=y is not set
    CONFIG_MEMCG_KMEM=y
    
    

    查看系统cgroups

    ~]# ll /sys/fs/cgroup/
    total 0
    dr-xr-xr-x 4 root root  0 Jun  1 15:55 blkio
    lrwxrwxrwx 1 root root 11 Jun  1 15:55 cpu -> cpu,cpuacct
    lrwxrwxrwx 1 root root 11 Jun  1 15:55 cpuacct -> cpu,cpuacct
    dr-xr-xr-x 4 root root  0 Jun  1 15:55 cpu,cpuacct
    dr-xr-xr-x 2 root root  0 Jun  1 15:55 cpuset
    dr-xr-xr-x 4 root root  0 Jun  1 15:55 devices
    dr-xr-xr-x 2 root root  0 Jun  1 15:55 freezer
    dr-xr-xr-x 2 root root  0 Jun  1 15:55 hugetlb
    dr-xr-xr-x 4 root root  0 Jun  1 15:55 memory
    lrwxrwxrwx 1 root root 16 Jun  1 15:55 net_cls -> net_cls,net_prio
    dr-xr-xr-x 2 root root  0 Jun  1 15:55 net_cls,net_prio
    lrwxrwxrwx 1 root root 16 Jun  1 15:55 net_prio -> net_cls,net_prio
    dr-xr-xr-x 2 root root  0 Jun  1 15:55 perf_event
    dr-xr-xr-x 4 root root  0 Jun  1 15:55 pids
    dr-xr-xr-x 4 root root  0 Jun  1 15:55 systemd
    
    

    有了以上chroot、namespace、cgroup就具备了基础的容器运行环境,但是还需要有相应的创建于删除的管理工具,以及如何把容器运行起来,容器数据怎么处理,如何进行启动、关闭

    cgroup具体实现

    Name
    blkio 块设备IO限制
    cpu 使用调度程序为Cgroup任务提供cpu的访问
    cpuacct 产生cgroup任务的cpu资源报告。
    cpuset 如果是多核心cpu,这个子系统会为cgroup任务分配单独的cpu和内存
    devices 允许或拒绝cgroup任务对设备的访问
    freezer 暂停和恢复cgroup任务
    memory 设置每个cgroup的内存限制以及产生内存资源报告
    net_cls 标记每个网络包以供cgroup方便实用
    ns 命名空间子系统
    perf_event 增加对每group的监控跟踪的能力,可以检测属于某个特定的group的所有线程以及运行在特定CPU上的线程
  • 相关阅读:
    数据结构之堆排序
    数学之向量的点积(点乘、数量积)
    解决oracle11g数据库监听连接不上问题
    纯净版SSM
    maven打包mapper.xml打不进去问题
    servlet读取请求参数后流失效的问题
    Linux---centos7.0安装、配置
    5-- String 、StringBulid 、StringBuffer的区别
    02 | Java内存模型:看Java如何解决可见性和有序性问题
    01 | 可见性、原子性和有序性问题:并发编程Bug的源头
  • 原文地址:https://www.cnblogs.com/Gmiaomiao/p/13172555.html
Copyright © 2020-2023  润新知