cgroup——cpu限制小实验
使用cgcreate命令创建一个新的控制组:
sudo cgcreate -g cpu:my_group
在容器中创建一个脚本文件如下:这就是一个空跑的死循环。
#!/bin/sh
while true
do
:
done
运行这个shell,
./while.sh
用top命令,将while.sh运行的这个进程号PID加入控制组,
sudo cgclassify -g cpu,memory:my_group PID
用top命令观察while脚本运行的情况,此时几乎占据了整个cpu,CPU使用率均为100%上下浮动。
top -b 批次出现与while有关的进程状态。
在容器的cgroup目录下,设置cpu.max限制容器中进程最多只能使用一半的CPU时间。
$ cat cpu.max
max 100000 # 内容格式为:[每个周期中可以使用的时间 一个周期中总共的时间],单位为微秒
$ echo 50000 100000 > ./cpu.max
接着我们在容器中运行while.sh脚本,用top命令观察while脚本运行的情况:
可以看到CPU使用率那一列始终在50%上下波动。
cgroup常用指令
在容器内使用cgroup限制CPU可以使用以下步骤:
- 确保你的内核支持cgroup,并且已经安装了cgroup工具。
- 创建一个名为cpu的cgroup,可以使用以下命令:
sudo cgcreate -g cpu:/cpu
- 设置cpu的限制,可以使用以下命令:
其中,sudo cgset -r cpu.cfs_quota_us=<quota> -r cpu.cfs_period_us=<period> cpu
<quota>
表示CPU分配给cgroup的时间量,以微秒为单位,<period>
表示时间周期,以微秒为单位。
例如,如果想要将CPU限制在50%的使用率,可以设置quota
为50000(注意,具体值可能需要根据你的系统进行调整):sudo cgset -r cpu.cfs_quota_us=50000 -r cpu.cfs_period_us=100000 cpu
- 将容器进程加入到cpu cgroup中,可以使用以下命令:
其中,sudo cgclassify -g cpu:/cpu <pid>
<pid>
表示容器进程的PID。 - 确认限制是否生效,可以使用以下命令:
这将显示出cpu cgroup的当前配置信息,包括cpu的限制情况。sudo cgget -g cpu:/cpu
通过以上步骤,你可以在容器内使用cgroup限制CPU的使用。请注意,具体的命令可能会因为你使用的cgroup工具版本和操作系统版本的不同而有所差异,你可能需要参考相应的文档和手册来获取更详细的信息。