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