注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

osdba的博客

敢于担当,拥抱变化,锐意进取,永不止步

 
 
 

日志

 
 

libcgroup资源控制  

2012-07-13 10:47:10|  分类: linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 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
... ...
<user>:<process name>    <controllers>    <destination>
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
... ...
 
##############################################################################
  评论这张
 
阅读(458)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017