Linux Control Group
Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。
这个项目最早是由Google的工程师在2006年发起(主要是Paul Menage和Rohit Seth),最早的名称为进程容器(process containers)。
在2007年时,因为在Linux内核中,容器(container)这个名词太过广泛,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。然后,其它开始了他的发展。
在Linux系统中能够控制的资源列表如下:
cpu:
主要限制进程的cpu使用率。
cpuacct:
可以统计cgroups中的进程的cpu使用报告。
cpuset:
可以为cgroups中的进程分配单独的cpu节点或者内存节点。
memory:
可以限制进程的memory使用量。
blkio:
可以限制进程的块设备io。
devices:
可以控制进程能够访问某些设备。
net_cls:
可以标记cgroups中进程的网络数据包,然后可以使用tc模块(traffic control)对数据包进行控制。
net_prio:
这个子系统用来设计网络流量的优先级
freezer:
可以挂起或者恢复cgroups中的进程。
ns:
可以使不同cgroups下面的进程使用不同的namespace
hugetlb:
这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。
CPU资源限制演示:
(1)可以查看Cgroup类型
mount -t cgroup
(2)进入到CPU的挂载路径,并创建自定义的资源限制组。
cd /sys/fs/cgroup/cpu && mkdir cpu-test-linux && ls cpu-test-linux
(3)使用stress压力测试
yum -y install epel-release
yum -y install stress
stress -c 4 -v -t 20m # 压力测试20分钟,启动4个worker进程的CPU压测。
(4)限制CPU的使用率在30%
cd /sys/fs/cgroup/cpu/cpu-test-linux && echo 30000 > cpu.cfs_quota_us
(5)将任务的ID加入自定义限制组。
# ps -ef | grep stress | grep -v grep
root 9862 4432 0 11:57 pts/1 00:00:00 stress -c 4 -v -t 10m
root 9863 9862 99 11:57 pts/1 00:06:29 stress -c 4 -v -t 10m
root 9864 9862 99 11:57 pts/1 00:06:29 stress -c 4 -v -t 10m
root 9865 9862 99 11:57 pts/1 00:06:29 stress -c 4 -v -t 10m
root 9866 9862 99 11:57 pts/1 00:06:29 stress -c 4 -v -t 10m
# cd /sys/fs/cgroup/cpu/cpu-test-linux # 进入到咱们自定义的限制组,分别加入限制的进程ID
echo 9862 >> tasks # 建议加入后,立刻查看top的信息,最好执行一个看一个效果。
echo 9863 >> tasks
echo 9864 >> tasks
echo 9865 >> tasks
echo 9866 >> tasks
docker的CPU限制:
1.启动容器
[root@centos201 ~]# docker run --name linux-stress-cpu -d liuzhonghua/linux-tools:v0.1 stress -c 4 -v -t 20m
2.查看容器的状态
[root@centos201 ~]# docker stats linux-stress-cpu
3.更新CPU限制案例,修改CPU的内存限制为30%。
[root@centos201 ~]# docker container update --cpu-quota=30000 linux-stress-cpu
docker的内存限制:
1.启动容器
[root@centos201 ~]# docker run --name linux-stress-memory -d liuzhonghua/linux-tools:v0.1 tail -f /etc/hosts
2.查看容器的状态
[root@centos201 ~]# docker stats linux-stress-memory
3.更新memeory限制案例,限制内存使用量为200M。
[root@centos201 ~]# docker container update -m 209715200 --memory-swap 209715200 linux-stress-memory
4.压测是否能够超过200M内存
[root@centos201 ~]# docker exec linux-stress-memory stress --vm-bytes 60M -m 3 --vm-keep