说明
只是记录cgroup在centos 6.5的简单使用。
相关的介绍和命令的使用自行在网上查阅。
安装
yum install libcgroup -y
服务
默认没有启cgconfig服务,可以用 service cgconfig status 看到.
启动cgconfig服务, 使用: service cgconfig start
启动服务时,默认加载的配置文件是 /etc/cgconfig.conf
配置文件默认内容:
mount {
cpuset = /cgroup/cpuset;
cpu = /cgroup/cpu;
cpuacct = /cgroup/cpuacct;
memory = /cgroup/memory;
devices = /cgroup/devices;
freezer = /cgroup/freezer;
net_cls = /cgroup/net_cls;
blkio = /cgroup/blkio;
}
默认会挂载所有的controller
如果使用cgconfig服务,当这个服务器停掉会删除它挂载的所有东西。
可以使用cgsnapshot 生成快照:
cgsnapshot -s > /etc/cgconfig.conf
挂载 cgroup 文件系统
mount -t cgroup cgroup /cgroup
可以使用 -o 指定 子系统, 比如使用 cpu 子系统:
mount -t cgroup -o cpu cpu /cgroup
重新挂载 指定 remount
mount -t cgroup -o remount cgroup /cgroup
只有在没有下层层级的情况下才能 remount
卸载test层级,使用umount就行:
umount /cgroup/test
列出所有的子系统
lssubsys -am
列出所有的group
lscgroup
CPU
-
CPU绑定,将线程分配给固定的CPU 使用cpuset, 内核需要开启 CONFIG_CPUSETS=y 执行 cat /boot/config-
uname -r
| grep CPUSETS 可以确认 创建子层级: mkdir /cgroup/cpuset/test 删除子层级 rmdir /cgroup/cpuset/test 执行 lscpu 查看cpu, 把cpu 1 分配给这个组 echo 1 > /cgroup/cpuset/test/cpuset.cpus echo 0 > /cgroup/cpuset/test/cpuset.mems 把当前bash的进程加入tasks echo $$ > /cgroup/cpuset/test/tasks 启动测试程序 perl -e ‘while (true) {}’ & 进程号为 2232 查看当前的信息 ps -eLo pid,lwp,psr,args | grep -v grep | grep perl 2232 2232 1 perl -e while (true) {} -
CPU时间分配
创建两个分组 mkdir /cgroup/cpu/test1 mkdir /cgroup/cpu/test2 此时, test1, test2 分别使用50%的CPU资源 可以修改 cpu.shares 设置使用CPU的比例 echo 1024 > /cgroup/cpu/test1/cpu.shares echo 512 > /cgroup/cpu/test2/cpu.shares 此时, test1使用的CPU资源是test2的2倍 限制绝对的CPU使用率, 比如限制50%: echo 50000 > /cgroup/cpu/test/cpu.cfs_quota_us
内存
-
限制内存的使用量
mkdir /cgroup/memory/test1 限制 1G 的使用量 echo 1G > /cgroup/memory/test1/memory.limit_in_bytes 写入 -1 表示无限制 当内存超过1G则会触发OOM,进程直接被杀掉!
-
关闭 oom killer echo 1 > /cgroup/memory/test1/memory.oom_control
网络
mkdir /cgroup/net_cls/test
echo 0x100001 > /cgroup/net_cls/test/net_cls.classid
然后使用 tc 或 iptables 对 0x100001 做网络限制
tc只能对流出的流量(上传)做限制
参考: http://lxr.free-electrons.com/source/Documentation/cgroups/net_cls.txt
磁盘
-
设置权重
内核需要开启 CONFIG_BLK_CGROUP, CONFIG_CFQ_GROUP_IOSCHED, 使用下面两条命令确认: cat /boot/config-`uname -r` | grep CONFIG_BLK_CGROUP cat /boot/config-`uname -r` | grep CONFIG_CFQ_GROUP_IOSCHED mkdir /cgroup/blkio/test1 echo 1000 > /cgroup/blkio/test1/blkio.weight 权重范围 100 - 1000, 权重越大优先级越高
-
限制读的IOPS
echo "8:0 100000" > /cgroup/blkio/test1/blkio.throttle.read_iops_device 其中 "8:0" 为主次设备号, ls -l /dev/sda 或者 stat /dev/sda 可以查到。 https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/devices.txt 这个网址有详细的说明 "100" 为限制的磁盘IOPS
-
限制读的bps
echo "8:0 1048576" > /cgroup/blkio/test1/blkio.throttle.read_bps_device
-
限制写的IOPS
echo "8:0 100000" > /cgroup/blkio/test1/blkio.throttle.write_iops_device
-
限制写的bps
echo "8:0 1048576" > /cgroup/blkio/test1/blkio.throttle.write_bps_device