?一、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子系统的字段
- cpu.shares: 可出让的能获得 CPU 使用时间的相对值。
- cpu.cfs_period_us:cfs_period_us 用来配置时间周期长度,单位为 us(微秒)。
- cpu.cfs_quota_us:cfs_quota_us 用来配置当前 Cgroup 在 cfs_period_us 时间内最多能使用的? ? ? ? CPU 时间数,单位为 us(微秒)。
- cpu.stat : Cgroup 内的进程使用的 CPU 时间统计。
- nr_periods : 经过 cpu.cfs_period_us 的时间周期数量。
- nr_throttled : 在经过的周期内,有多少次因为进程在指定的时间周期内用光了配额时间而受到限制。
- throttled_time : Cgroup 中的进程被限制使用 CPU 的总用时,单位是 ns(纳秒)。
三、CPU子系统实验
创建自己的cgroup文件夹
#第一步
cd /sys/fs/cgroup/cpu
sudo mkdir xueqingCpuDemo
cd xueqingCpuDemo
这里可以结合上边的CPU子系统简介具体了解一下
#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
?进程没了
至此,cpu子系统资源限制实验完成。
|