目录
Docker启动时资源管理使用的是了linux系统本身的Linux Cgroup进行管理。
Linux Cgroup 是限制一个进程使用的资源的上限,包括CPU、磁盘、内存、网络、带宽等。也可以对进程的优先级设计,审计,以及将进程挂起和回复等操作。
Linux Cgroup 暴露出来的接口是文件系统,以文件和目录的方式在操作系统的/sys/fs/cgroup路径下,使用mount -t cgroup可以查看。
/sys/fs/cgroup下有很多子目录(子系统):cpuset、cpu、 memory;每一个子系统都会为每个容器创建一个控制组。内面的参数可以使用docker命令进行设置。
1 操作系统层面的控制
###系统本身对进程的控制
##安装cgroup控制工具
[root@server1 cpu]# yum search cgroup
[root@server1 cpu]# yum install -y libcgroup-tools.x86_64
##查看当前组信息
[root@server1 x1]# cgget -a x1 ##x1为之前在cpu目录下创建,其中组件自动继承父类
##进入内存进行测试
[root@server1 ~]# cd /sys/fs/memory
[root@server1 memory]# mkdir x1 ##创建子组件
[root@server1 x1]# echo 209715200 > memory.limit_in_bytes ##需改配置参数
[root@server1 ~]# cd /dev/shm ##占内存的一半
[root@server1 shm]# touch bigfile
[root@server1 shm]# cgexec -g memory:x1 dd if=/dev/zero of=bigfile bs=1M count=200
##指定该进程使用的内存策略为memory:x1中的组策略
##指定某用户的进程使用该策略
[root@server1 etc]# vim /etc/cgrules.conf ##cgroup的配置文件
[root@server1 etc]# systemctl start cgred.service
##系统本身的读写控制
[root@server1 blkio]# mkdir x1
[root@server1 x1]# cat blkio.throttle.write_bps_device
[root@server1 ~]# cgexec -g blkio:x1 dd if=/dev/zero of=file bs=1M count=100
2 容器内的控制
###容器内资源控制
##CPU控制
[root@server1 ~]# docker run -it --cpu-period=100000 --cpu-quota=2000 rhel7
##长度为cpu-period中所使用的总量cpu-quota
##内存控制
[root@server1 ~]# docker run -it --memory 200M --memory-swap 200M rhel7 bash
##IO控制
[root@server1 ~]# docker run -it --device-write-bps /dev/sda:30MB rhel7 bash
##--device-write-bps 限制写设备的bps
##block IO只对direct IO 有效
3 其他控制(基于Cgroup)
###其他管理
##进程的控制与恢复
[root@server1 ~]# cd /sys/fs/cgroup/freezer/docker/
##FROZEN 冻结
##THAWED 活跃
##容器冻结--容器解冻
[root@server1 ~]# docker container pause vm1
[root@server1 ~]# docker container unpause vm1