zoukankan      html  css  js  c++  java
  • linux的cgroup控制

    cgroup:control group-控制群组:将用户(的进程)加入某个群组(又叫控制器controller), 通过

    指定群组对资源-cpu 内存 network等的使用,来限制用户对计算机资源的使用

    类似于windows中的“ 资源配额” ??

    类似于很多软件中的“RBAC“ ,基于角色的访问控制??

    跟pam认证相比,cgroup更简单更集中更便于管理,符合unix的kiss原则

    ----------------------借鉴老外的设计(系统)的思想

    整个功能由libcgroup.xx.rpm包实现

    [Thu Oct 22 09:09 ~/Desktop]# rpm -qa|grep "cgroup"
    libcgroup-0.37-4.el6.i686

    首先设计控制器类型: 设一个/etc/cgconfig.conf文件,包括cpu cpuset cpuacct memory devices blkio freezer net_cls

      并不是一上来就整一个控制器,全部内容都甩到里面去, 而是  “分层” 设计思想

    然后设计控制器(即实际要用来控制的群组=controller): 指定控制器的类型,控制规则: 这个也是在/etc/cgconfig.conf文件中定义的

      定义好要使用的控制器后,将控制器就写在:/cgroup/memory-cpu-netcls等对应的目录中,这个表示“伪文件系统”

    有了控制器群组,就要告诉cgroup哪些用户要限制资源的使用,就要把用户(或进程)加入到群组中去:

      它设计了一个配置文件: /etc/cgrules.conf

    好了,经过这两个步骤的设置就可以使用cgroup了,cgroup的资源限制就起作用了:

    启动cgroup服务,然后可以查看了:cgget, 直接ls /cgroup下的文件...

    **** 以下内容来自网络****

    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 // 是cgconfig服务,不是cgroup服务!
    [root@localhost ~]# service cgred start ; chkconfig cgred on

    **** end: 来自网络****

    cgred: cg-re-d: cgroup ruels engine daemon: cgroup的规则引擎daamon,

    --- accompanied by the dean, they visited the hospital 

    --- /etc/cgrules.conf中的<destination> 是指你建立的控制器的路径,取该控制器对/cgconfig/"controller_type"/...,

    可以设置多级的子目录,这样便于对管理器进行分类和管理

    如: harry memory  usergoup/faculty/harry/   (faculty:f2ek2ti)  

    harry memory usergroup/faculty/harry/cp(单个的进程)

    @student  memory usergroup/student/ (用户组)

    ########################################

    #

    # 实际在设置group cpu/cpuset类型时,如果直接设置子目录的资源访问限制,会发生“cgconfig"服务起不来的错误:

    [Thu Oct 22 14:51 ~]# service cgconfig start
    Starting cgconfig service: Loading configuration file /etc/cgconfig.conf failed
    Value setting does not succeed
    Failed to parse /etc/cgconfig.conf                         [FAILED]
    原来的/etc/cgconfig.conf文件内容:

    ...

    group daemon/http {
        cpu {
            cpu.share = “512“;    # cpu.share = "512" ,是说cpu的优先级,不是使用cpu的多少
        }
    }

    ...

    解决方法参考这篇文章:   http://blog.csdn.net/t0nsha/article/details/8511433

    就是说, 设置类型如果是cpu,cpuset要限制某个用户(组)限制使用哪个cpu,使用cpu的优先级时,不能只设置最底层的 “子目录“

    的限制,还要设置其父目录的使用限制,不包括根的限制:

    #### 设置其父目录的使用限制

    group daemons {

      cpu {

        cpu.share="512"

      }

    }

    #### 设置其子目录的使用限制

    group daemons /http {

      cpu {

        cpu.share="512"

      }

    }

  • 相关阅读:
    数据提交
    Python网页信息抓取
    Python语法学习
    Elasticsearch5.x 升级-插件
    LeetCode 33 搜索旋转排序数组
    按之字形顺序打印二叉树
    股票的最大利润
    LeetCode 1143 最长公共子序列
    对称的二叉树
    两个链表的第一个公共结点
  • 原文地址:https://www.cnblogs.com/bkylee/p/4899946.html
Copyright © 2011-2022 走看看