cgroup
简介
cgroup是linux内核提供的一种进程资源控制与统计的功能,交互接口是cgroupfs类型的文件系统。
cgroup的类型有:
cpu:限制cpu使用率
cpuset:限制可以使用的cpu
cpuacct:统计cpu使用信息
memory:限制进程使用的内存,内核内存和交换分区
cgroup基础
1.查看系统挂载的cgroup文件系统
[root@testdsq cgroup]# mount | grep cgroup
2.测试cgroup功能
mkdir /sys/fs/cgroup/cpu/dsqtest
cd /sys/fs/cgroup/cpu/dsqtest
echo "10000" > cpu.cfs_quota_us
cat cpu.cfs_period_us #值为100000
#这里可以理解cfs_period_us为一个计算周期为1000000us,而dsqtest这个组最多可以使用10000us,也就是最多使用1个cpu的10%
#写一个死循环脚本
[root@testdsq script]# cat test1.sh
i=0
while [ 1 ]
do
let i=i+1
done
[root@testdsq script]# sh test1.sh
#top查看进程使用了1个cpu
#ps -ef | grep test1 获取进程号为1828461
#将test1.sh进程加入dsqtest组
echo 1828461 > /sys/fs/cgroup/cpu/dsqtest/cgroup.procs
#查看进程的cgroup信息
cat /proc/1828461/cgroup
#top查看进程使用了1个cpu的10%
#可以再次调整cpu.cfs_quota_us的值并观察
#可以再启动一个test1.sh并把进程号加入cgroup.procs,那么dsqtest组的总额会在这两个进程之间均分,也就是每个进程使用1个cpu的5%。
#结束进程test1.sh,则会自动从cgroup.procs移除进程号
#无法使用rm从cgroup文件系统删除dsqtest,需要cgdelete cpu:dsqtest
3.cgroup命令行工具
#cgcreate创建cgroup
cgcreate -d 700 -f 700 -s 750 -t myroot:root -a myroot:root -g cpu:dsqtest2 -g cpu:dsqtest3
#cgget打印cgroup信息
cgget -g cpu:dsqtest2 -g cpu:dsqtest3
#cgexec在指定的cgroup启动程序
cgexec -g cpu:dsqtest2 sh /root/script/test1.sh
#cgclassify移动进程到指定的cgroup组
cgclassify -g cpu:dsqtest3 1852989

浙公网安备 33010602011771号