• 003_Linux的Cgroup<实例详解>


    为什么要有cgroup

    Linux系统中经常有个需求就是希望能限制某个或者某些进程的分配资源。也就是能完成一组容器的概念,在这个容器中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等。于是就出现了cgroup的概念,cgroup就是controller group,最初由google的工程师提出,后来被整合进Linux内核中。

    Cgroup是将任意进程进行分组化管理的Linux内核功能cgroup本身提供将进程进行分组化管理的功能和接口的基础结构

    而后的Android操作系统也就凭借着这个技术,为每个应用程序分配不同的cgroup,将每个程序进行隔离,达到了一个应用程序不会影响其他应用程序环境的目的。

    概念

    task:

    一个进程

    control group:

    控制族群,按照某种标准划分的进程组

    hierarchy:

    层级,control group可以形成树形的结构,有父节点,子节点,每个节点都是一个control group,子节点继承父节点的特定属性。

    subsystem:

    子系统。

    子系统就是资源控制器,每种子系统就是一个资源的分配器,比如cpu子系统是控制cpu时间分配的。

    可以使用lssubsys -al来列出系统支持多少种子系统,和使用ls /sys/fs/cgroup/ (ubuntu)来显示已经挂载的子系统:

    Image(6)

    可以看到这里的几个子系统,比如cpu是控制cpu时间片的,memory是控制内存使用的。

    如何安装cgroup

    安装cgroup:

    apt-get install cgroup-bin

    如何为cgroup分配限制的资源

    首先明白下,是先挂载子系统,然后才有control group的。意思就是比如想限制某些进程的资源,那么,我会先挂载memory子系统,然后在memory子系统中创建一个cgroup节点,在这个节点中,将需要控制的进程id写入,并且将控制的属性写入。

    拿memory子系统为例:

    通过查看cgroup的配置文件:

    cat /etc/cgconfig.conf

    Image(7)

    看到memory子系统是挂载在目录/sys/fs/cgroup/memory

    进入这个目录

    创建一个文件夹,就创建了一个control group

    mkdir test

    发现test目录下自动创建了许多文件:

    Image(8)

    这些文件的含义如下:

    Image(9)

    于是,限制内存使用我们就可以设置memory.limit_in_bytes

    Image(10)

    将一个进程加入到这个test中

    echo $$ > tasks

    这样就将当前这个终端进程加入到了内存限制的cgroup中了。

    将这个cgroup删除只要删除目录就行了

    rmdir test

    参考文章

    http://www.cnblogs.com/lisperl/archive/2012/04/17/2453838.html

    http://www.cnblogs.com/lisperl/archive/2012/04/15/2450183.html

    http://www.cnblogs.com/lisperl/archive/2012/04/18/2455027.html

    http://blog.chinaunix.net/uid-20940095-id-3294134.html

  • 相关阅读:
    SI与EMI(一)
    设计上如何避免EMC问题
    EMC与地之重新认识地
    EMC学习之电磁辐射
    围殴拓扑和端接之终结篇
    T型及Fly_by拓扑之应用总结
    拓扑结构介绍及其种类
    [转]Verilog综合时wire和reg如何防止被优化
    Verilog基础知识0(`define、parameter、localparam三者的区别及举例)
    [转]jumbo frame介绍
  • 原文地址:https://www.cnblogs.com/itcomputer/p/4634942.html
Copyright © 2020-2023  润新知