• docker的核心原理-cgroup


    Cgroup

    **************************************************************

    2.为什么限制硬件资源:

    一个虚拟机开启一个nginx需要很大的资源,

    在docker里:

    nginx 一个进程大概占用10-15M

    公用内存的弊端:黑客进攻,内存膨胀,增加物理内存的使用率,从而损坏虚拟机和物理内存,最终导致物理机出现问题。

    由于无法对黑客的入侵进行防御,所以引出下面的问题,并进行解决。

    对计算机的硬件资源进行控制,不能让一个容器把所有资源抢占,如cpu或者内存

    3.cgroup介绍

    docker对物理资源进行限制,每个容器可以使用多少内存,cpu优先级,硬盘等,

    4.限制的内容:

    硬盘:bps lps读写次数,和写的量

    cpu 对处理的优先级进行限制

    5.cgroups介绍:

    control groups

    最早谷歌2006年提出来的

    集成在linux的内核里,内核处理完成他就完成处理了(Linuxkernel)——process(进程tasks),将进程放到一个组里,进行限制。

    6.cgroup的连接方式:

    cgroup的连接方式,通过APL的伪文件系统sys实现的。

    (1)APL,伪文件系统sys-fs-cgroups,用来限制硬件资源。

    /proc/sys/net/ipv4 修改的就是这个文件,系统限制

    (2)cgroup以控制线程进程为主——sys-fs-cgroups-pids-tasks,把pid写进来到tasks,就可以对这个进程进行限制.

    (3)所有的功能都叫子系统subsystem——实现的效果是控制接口

    cgroup控制的具体事项叫做子系统

    如:cpu分配的时间,内存的使用量,硬盘iops/bps,都是cgroup进行限制的具体事项

    (4)子进程初始和父进程在同一个从group中,如果强行分开也是可以的。

    7.术语解释:

    task:要控制的进程

    cgroup:单位,可以有多个cgroup组,可以限制不同的内容,组名不能相同。

    subsystem:限制具体的内容,cgroup组中的具体事项

    hierarchy:层级树,一堆cgroup构成的,包含多个cgroup的叫层级树。

    8.安装cgroup管理组件:

    yum provides lssubsys

    查看yum的某一条命令属于哪一个软件包

    然后安装这个软件包

    yum -y install libcgroup-tools

    查看单独的cgroup支持的子系统

    lssubsys -a cgroup

    lssubsys -a 显示系统中支持的所有子系统,

    lssubsys -m 显示限制的目录的层次结构

    9.层级数的四大规则:

    (1)同一个hierarchy可以附加一个或多个子系统

    (2)一个已经附加到hierarchy的subsystem,不可以附加到其他的含有子系统的hierarchy上,可以附加到没有定义的控制的hierarchy

    (3)同一个task不能属于同一个hierarchy的不同cgroup中,仅可以属于不同的hierarchy中的不同的cgroup中。

    (4)父进程在哪个task里,子进程在哪个task里边。子进程属于父进程。

    10.subsys以挂载的形式进行限制:

    mount -t tmpfs cgroup /sys/fs/cgroup

    ls /sys/fs/cgroup

    lssubsys -a //查看限制,

    mkdir cg1

    mount -t cgroup -o cpu,memory cpu_and_mem /sys/fs/cgroup/cg1

    删除挂载:

    rmdir /sys/fs/cgroup/cg1

    限制具体内容:

    cd /sys/fs/cgroup/cg1

    vim cpuset.cpu

    0-1 可以使用第一个cpu和第二颗

    vim tasks

    pid   可以限制进程,将进程的pid写进来就可以限制这个进程。

    对io读写的限制,

    lps每秒读写次数

    bps读写大小

  • 相关阅读:
    oracle数据库的增长改查
    Delete、truncate、drop删除数据的区别
    oracle数据库分页查询
    Sql语句中的null值
    RestEasy 3.x 系列之三:jsonp
    跨域请求解决方法(JSONP, CORS)
    JdbcUtils 系列1
    RestEasy 3.x 系列之一:Hello world
    JAVA中int、String的类型转换
    struts2 的验证框架validation如何返回json数据 以方便ajax交互
  • 原文地址:https://www.cnblogs.com/Leonardo-li/p/8821731.html
Copyright © 2020-2023  润新知