摘要: Docker Notes系列为学习Docker笔记,本文是学习cgroups 资源限制的笔记
正文:
上节我们了解了Docker背后的资源隔离技术namespace,本节介绍另一个内核工具cgroups。
cgroups作用
cgroups可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO等),为容器实现虚拟化提供了基本保证,是构建Docker等一系列虚拟化管理工具的基石
cgroups提供:
资源限制
对进程组的资源使用限制,如对应用运行时使用内存的限制
优先级
通过分配CPU的时间片数量和磁盘IO带宽大小
资源统计
统计系统的资源使用量
控制
对进程组挂起、恢复、重启动等操作
cgroups子系统
cgroups现在全称是control groups,它为每种可以控制的资源定义了一个子系统
blkio
可以限制块设备的输入输出,如磁盘、USB
cpu
可以限制进程的cpu 使用率
cpuacct
可以生成cpu 使用报告
cpuset
可以为cgroups中进程分配独立的CPU和内存
devices
可以控制进程对设备的访问
freezer
可以对进程进行挂起或恢复
memory
可以对进程的memory使用量进行限制,并生成内存资源使用情况报告
perf_event
可以对进程进行统一的性能测试
net_cls
可以使用classid标记网络包,然后Linux流量控制程序识别从具体cgroups中生成的数据包
docker组的层级结构
docker daemon会在每个子系统的控制组目录下创建一个叫docker的控制组,在这个组里为每一个容器创建一个容器id命名的容器控制组
- 如cpu子系统层级结构
1 | [root@cf /]# tree /sys/fs/cgroup/cpu/docker |
一些文件的作用
tasks
1
2
3
4
5[root@cf 69aa00d7aa3b6654b63280e66b671f509a3019a032ec5a09e299b793b37c6775]# cat tasks
29001
29058
29059
29060该文件罗列了所有在该groups中的进程id
cgroup.procs
1
2[root@cf 69aa00d7aa3b6654b63280e66b671f509a3019a032ec5a09e299b793b37c6775]# cat cgroup.procs
29001该文件罗列了所有在该groups中的进程组id(第一个进程的pid)
notify_on_release
该文件默认0,表示cgroups是否在最后一个进程退出时通知运行release agent,0表示不运行
cpuacct.stat
1
2
3[root@cf 69aa00d7aa3b6654b63280e66b671f509a3019a032ec5a09e299b793b37c6775]# cat cpuacct.stat
user 2435
system 4548该文件统计了该控制组中进程用户态和内核态的 cpu 使用量
cpuacct.usage
&cpuacct.usage_percpu
该文件统计了该控制组中进程消耗的cpu时间,单位是纳秒