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读写大小

原文地址:https://www.cnblogs.com/Leonardo-li/p/8821731.html