cgroup是Linux内核提供的一种新的资源管理机制,全称为Control Group(控制群组),在Red Hat Enterprise Linux 6.x系统中已经全面支持,对应的软件包为libcgroup。cgroup可以为系统中所运行的任务(进程)的用户定义群组,并根据群组来分配资源,例如CPU、内存、网络带宽等等。
Cgroup使用预定义的控制器(子系统)来决定具体的资源限制类型,以及具体的限制参数,通过挂载伪文件系统的方式来读取设置、应用控制细节。相对于PAM认证模块的分散性来说,cgroup具有集中管理的便利性。可用的控制子系统主要包括:
blkio:为块设备定义输入/输出限制
cpu:为任务所使用的cpu时间提供调度控制
cpuacct:为任务自动生成cpu资源使用报告
cpuset:为任务分配独立CPU(对于多核处理器)和内存节点
devices:允许或者拒绝某些任务访问指定的设备
freezer:允许挂起或者恢复群组中的任务
memory:限制任务所使用的内存,并自动生成内存资源报告
net_cls:使用登记识别符(classid)来标记网络数据包,从而允许tc等流量控制程序使用
ns:允许为任务分配不同的名称空间
##############################################################################
系统环境:
RHEL 6.2 [2.6.32-220.el6.i686]
软件环境:
libcgroup-0.37-3.el6.i686
httpd-2.2.15-15.el6.i686
##############################################################################
一、配置cgroup、定义新群组
[root@localhost ~]# vim /etc/cgconfig.conf //参考 man 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;
}
group exgroup { //新建的组,控制器类型为memory
//挂载后位于/cgroup/memory/exgroup/*
memory {
memory.limit_in_bytes = 209715200; //限制使用的内存大小(200MB)
}
}
group daemons/http { //新建的组,控制器类型为cpu
//挂载后位于/cgroup/cpu/daemons/http/*
cpu {
cpu.share = "512"; //CPU优先级,默认为1024
}
}
二、配置资源限制规则
1. 对于系统服务,建议采用daemon模式 —— /etc/sysconfig/xxxx
[root@localhost ~]# vim /etc/sysconfig/httpd
... ...
CGROUP_DAEMON="cpu:daemons/http"
//通过CGROUP_DAEMON指定httpd服务要使用的控制器类型(cpu)、资源群组(daemons/http)
//可参考文档:/usr/share/doc/libcgrou-0.37/README.RedHat
2. 对于用户进程,需要编辑策略文件 —— /etc/cgrules.conf
[root@localhost ~]# vim /etc/cgrules.conf
... ...
:
harry memory exgroup/
*:httpd cpu daemons/http
//第1-3列依次表示:用户和进程、控制器类型、资源群组
//用户名与进程名之间以冒号分隔,允许使用通配符
//如果使用多个控制器,以逗号分隔
//资源群组只需要写相对(于伪文件系统根目录的)路径
三、启动cgroup相关服务
系统服务cgconfig会读取cgconfig.conf配置文件,并据此挂载伪文件系统;系统服务cgred会调用文件cgrules.conf,并应用其中设置的规则来控制资源使用。
[root@localhost ~]# service cgconfig start ; chkconfig cgconfig on
[root@localhost ~]# service cgred start ; chkconfig cgred on
四、查看、验证cgroup信息
1. 查看已挂载的cgroup伪文件系统
[root@localhost ~]# ls /cgroup/ //查看cpu控制器子树
cgroup.procs cpu.rt_period_us cpu.stat release_agent
cpu.cfs_period_us cpu.rt_runtime_us daemons tasks
cpu.cfg_quota_us cpu.shares notify_on_release
[root@localhost ~]# ls /cgroup/cpu/daemons/http //查看daemons/http资源组
cgroup.procs cpu.rt_period_us cpu.stat
cpu.cfs_period_us cpu.rt_runtime_us notify_on_release
cpu.cfg_quota_us cpu.shares tasks
2. 查看httpd服务受控状态
[root@localhost ~]# service httpd restart
[root@localhost ~]# cat /cgroup/cpu/daenmons/http/tasks //受控的PID列表
22985
22987
... ...
[root@localhost ~]# pgrep -i httpd //实际的httpd进程与受控列表相吻合
22985 httpd
22987 httpd
... ...
[root@localhost ~]# cat /cgroup/cpu/daenmons/http/cpu.shares //确认与所限制的值一致
512
3. 查看exgroup群组的受控状态
[root@localhost ~]# cgget -g memory exgroup //使用cgget查看
exgroup:
memory.memsw.failcnt: 0
memory.memsw.limit_in_bytes: 9223372036854775807
memory.memsw.max_usage_in_bytes: 8192
memory.memsw.usage_in_bytes: 0
memory.move_charge_at_immigrate: 0
... ...
memory.limit_in_bytes: 209715200
... ...
[root@localhost ~]# cat /cgroup/memory/exgroup/memory.limit_in_bytes
209715200
以harry用户登录,并执行相关人物,查看并验证资源限制(使用的内存不能超过200MiB)
[root@localhost ~]# cat /cgroup/memory/exgroup/tasks
1454
23375
23398
... ...
##############################################################################
阅读(7211) | 评论(0) | 转发(1) |