Chinaunix首页 | 论坛 | 博客
  • 博客访问: 804340
  • 博文数量: 869
  • 博客积分: 201
  • 博客等级: 入伍新兵
  • 技术积分: 3376
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-21 19:42
文章分类

全部博文(869)

文章存档

2014年(4)

2013年(415)

2012年(453)

我的朋友

分类:

2012-10-16 17:20:18

原文地址:libcgroup资源控制 作者:一路狂笑


libcgroup资源控制
 
2012-06-12  TsengYia#126.com http://tsengyia.blog.chinaunix.net/
 
    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
... ...
 
##############################################################################
阅读(585) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~