cgroup

作者: aneirin | 来源:发表于2019-01-09 15:28 被阅读0次

    在生产环境中,运行在服务器中的程序如果对系统资源(CPU、内存等)过量使用,可能导致服务器Hang住,影响其他程序的正常运行。为了应对此类问题,有必要限制程序所能使用的系统资源。要实现这一目的,需借助Linux系统的cgroup机制。
    可以使用四种方式操作cgroup:

    • 直接操作cgroup文件系统(/sys/fs/cgroup)
    • 使用cgm客户端(含在cgmanager)
    • 通过cgcreate、cgexec、cgclassify(通过安装包cgroup-tools)
    • 通过文件cgconfig.conf和cgrules.conf(通过安装包cgroup-tools)

    这里通过第四种方式来操作cgroup。
    将cgroup定义在文件cgconfig.conf中

    group cg1 {
          cpuset {
              cpuset.cpus = "1,2";
           }
           memory {
             memory.limit_in_bytes = 1000000000;
           }
    }
    
    group cg2 {
          cpuset {
              cpuset.cpus = "3,4";
           }
          memory {
               memory.limit_in_bytes = 1000000000;
           }
    }
    

    这里使用了两个controller,cpuset和memory,cg1里面的进程仅能使用cpu1和cpu2,使用的内存不能超过1G,cg2类似。接着定义cgrules.conf文件,这个文件的作用是将选定进程和cgroup绑定。

    *:emacs         cpuset,memory      cg1
    *:conkeror      cpuset,memory      cg1
    *:firefox       cpuset,memory      cg2
    *:slack         cpuset,memory      cg2
    

    文件的含义可以运行命令man cgrules.conf查看详细解释
    使用下面命令使规则生效

    cgconfigparser -l /etc/cgconfig.conf
    cgrulesengd
    

    查看配置是否生效,

    cat /proc/$(pidof emacs)/cgroup | grep cg1
    7:cpuset:/cg1
    10:memory:/cg1
    

    冒号将输出内容分为三个部分,从左往右
    1,层级的唯一ID号,这个号码和/proc/cgroups里面的内容是对应的
    2,绑定到这个层级的controller,多个controller可以使用逗号分隔
    3,cgroup的路径,这个路径是相对/sys/fs/cgroup/controller的
    注意
    删除cgroup,执行命令cgdelete删除,语法如下:
    cgdelete subsystems:path
    path是相对路径

    参考:
    https://manpages.debian.org/stretch/manpages/cgroups.7.en.html
    https://wiki.archlinux.org/index.php/cgroups
    https://github.com/jooyong-park/workspace/wiki/cgroups-on-debian-ubuntu

    相关文章

      网友评论

          本文标题:cgroup

          本文链接:https://www.haomeiwen.com/subject/oakgrqtx.html