一、cgroups简介
cgroups 的全称是control groups,cgroups为每种可以控制的资源定义了一个子系统。典型的子系统介绍如下:
- cpu 子系统,主要限制进程的 cpu 使用率。
- cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告。
- cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。
- memory 子系统,可以限制进程的 memory 使用量。
- blkio 子系统,可以限制进程的块设备 io。
- devices 子系统,可以控制进程能够访问某些设备。
- net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。
- freezer 子系统,可以挂起或者恢复 cgroups 中的进程。
- ns 子系统,可以使不同 cgroups 下面的进程使用不同的 namespace。
二、CPU子系统简介
三、CPU子系统实验
创建自己的cgroup文件夹
#第一步
cd /sys/fs/cgroup/cpu
sudo mkdir xueqingCpuDemo
cd xueqingCpuDemo
#cpu.shares:当前CPU使用时间的相对值,感觉上像是一个比例
lighthouse@VM-12-7-ubuntu:/sys/fs/cgroup/cpu/xueqingCpuDemo$ cat cpu.shares
1024
#cpu.cfs_period_us:当前使用cpu周期长度 单位是微秒
lighthouse@VM-12-7-ubuntu:/sys/fs/cgroup/cpu/xueqingCpuDemo$ cat cpu.cfs_period_us
100000
#cpu.cfs_quota_us:配置在cpu.cfs_period_us的时长内最多使用的cpu时长 -1意味着没有限制
lighthouse@VM-12-7-ubuntu:/sys/fs/cgroup/cpu/xueqingCpuDemo$ cat cpu.cfs_quota_us
-1
#cgroup.procs:这个cgroup控制的进程,这里一个都没有
lighthouse@VM-12-7-ubuntu:/sys/fs/cgroup/cpu/xueqingCpuDemo$ cat cgroup.procs
#跑一个死循环
while : ; do : ; done &
[1] 3020032 #这里会给显示出他的ipd
#把这个进程加入cgroup控制的进程中, 下面这条命令在执行的时候会显示没有权限
echo 3020032 > cgroup.procs
#解决方法:
sudo sh -c 'echo 3020032 > cgroup.procs'
#现在,这个进程已经被加到cgroup的控制组里了
#控制cpu的最大使用时间,这里意味着,每十万个cpu时间里,这个进程最多能用一万
#预期CPU使用率降到10%
sudo sh -c 'echo 10000>cpu.cfs_quota_us'
改个数看看,还好不好使
#杀掉这个进程
#其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程
kill -s 9 3020032
进程没了