linux cgroup

题记: cgroup早该学习了

缘起:

几十台虚拟机,没有资源限制,宿主机经常挂掉,不知道因为啥。

该看看cgroup了

  1. 上网查文档
  2. 安装:

    # yum install libcgroup
    # chkconfig cgconfig on
    # chkconfig cgred on

    1

    2

    3

    # yum install libcgroup

    # chkconfig cgconfig on

    # chkconfig cgred on

  3. 配置
    /etc/cgconfig.conf 添加:

    group vagrant{
    cpuset {
    cpuset.cpus = "0,1";
    cpuset.mems = "0";
    }
    }

    1

    2

    3

    4

    5

    6

    group vagrant{

    cpuset {

    cpuset.cpus = "0,1";

    cpuset.mems = "0";

    }

    }

    注意: cpuset.mems = “0”;是需要的,否则不生效哦(稍后再看是咋回事儿)
    /etc/cgrules.conf 添加: (据说对子进程是生效的)

    *:/usr/bin/vagrant * vagrant

    1

    *:/usr/bin/vagrant * vagrant

  4. 重启服务:

    # /etc/init.d/cgconfig restart
    # /etc/init.d/cgred restart

    1

    2

    # /etc/init.d/cgconfig restart

    # /etc/init.d/cgred restart

    cgconfig是配置服务, cgred是规则引擎daemon

  5. 测试:
    。。。 发现 /usr/bin/vagrant 启动的进程都放到了vagrant组中了,cpu只使用0、1,其他的都不会被用到
    修改配置文件后,重启两个服务,即可生效,可以立即影响到正在运行的进程

libcgroup 工作方式:

  1. cgconfig服务 其实是通过 /sbin/cgconfigparser 解析并load /etc/cgconfig.conf 以及 /etc/cgconfig.d/* ,把配置文件中需要mount的mount上去
  2. cgred服务其实是/sbin/cgrulesengd ;主要是listen /var/run/cgred.socket , 这个socket是个比较核心的东西,系统没启动一个进程(或者别的操作也会),就会通知到该socket,而/sbin/cgrulesengd就是要根据配置的规则把启动的那个进程添加(就是写一个文件那么的简单)到指定的cgroup中去
  3. 注意:
    1. /sbin/cgrulesengd 的man中说他可以接收USR1信号,但是实际上把这个信号发过去,进程就直接死掉,连pid文件和lock文件都不会清理掉的
    2. 内存限制指的是对该组中所有进程占用内存之和的限制,oom触发在申请内存的时候,如果是后期加入的,不会在加入的时候触发oom; blkio 的限制也是组内共享的
    3. /cgroup/memory/memory.oom_control 为 1时 ,内存不够时不会杀死进程,但是申请内存的程序会hang住
    4. cgexec 不依赖cgrulesengd ,cgrulesengd偶尔会不太好使,比如:修改完配置文件之后忘记重启了,所以,建议直接使用 cgexec来测试
    5. 限制blkio时需要知道磁盘的主设备号和次设备号,查看方法: lsblk
    6. cgred 服务stop时,不会将添加到cgroup中的pid给移除掉,但是cgconfig服务stop时会移除所有的cgroup
    7. /etc/cgrules.conf 中controller部分的 ‘*’ 代表添加到所有的子系统中(如果配置了的话),但是测试发现,如果同时添加到cpuset,memory 子系统中,写 ‘*’  却只添加到了cpuset中了,明确些cpuset,memory 就好使(这种问题浪费了新人很多的时间)
    8. 当将进程加入某个group时,如果该进程没有在加入group之后发生内存(资源)申请时,则子系统的统计信息中是没有包含该进程的资源信息的,虽然该进程已经占用了很大的rss,内存子系统中的rss很有可能依然是零.(可能这根本就不是问题)

参考:

https://www.kernel.org/doc/Documentation/cgroups/memory.txt

http://www.cnblogs.com/yanghuahui/p/3751826.html

时间: 2024-08-18 04:01:05

linux cgroup的相关文章

[转载] linux cgroup技术介绍

原文: http://coolshell.cn/articles/17049.html 大名鼎鼎的左耳朵耗子的文章, 非常浅显的介绍了linux cgroup技术, 看完之后一定让你明白cgroup技术 前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Namespace把我Jail到一个特定的环境中去了,但是我在其中的进程使用用CPU.内存.磁盘等这些计

[转载] linux cgroup

原文: http://coolshell.cn/articles/17049.html 感谢左耳朵耗子的精彩文章. 前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Namespace把我Jail到一个特定的环境中去了,但是我在其中的进程使用用CPU.内存.磁盘等这些计算资源其实还是可以随心所欲的.所以,我们希望对进程进行资源利用上的限制或控制.这就是Li

Docker基础技术:Linux CGroup

前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Namespace把我Jail到一个特定的环境中去了,但是我在其中的进程使用用CPU.内存.磁盘等这些计算资源其实还是可以随心所欲的.所以,我们希望对进程进行资源利用上的限制或控制.这就是Linux CGroup出来了的原因. Linux CGroup全称Linux Control Group, 是Linu

【转载】Linux cgroup资源隔离各个击破之 - cpu隔离1

Linux cgroup 有两个子系统支持CPU隔离.一个是cpu子系统,另一个是cpuset子系统. cpu子系统根据进程设置的调度属性,选择对应的CPU资源调度方法 .1. 完全公平调度 Completely Fair Scheduler (CFS)原理详见https://www.kernel.org/doc/Documentation/scheduler/sched-design-CFS.txtCFS用于处理以下几种进程调度策略SCHED_OTHERSCHED_BATCHSCHED_IDL

【转载】Linux cgroup资源隔离各个击破之 - io隔离

Linux Cgroup blkio子系统的用法.   blkio子系统支持的两种IO隔离策略 .1. (Completely Fair Queuing 完全公平队列)cfq io调度策略,支持按权重分配IO处理的时间片,从而达到IO在各资源组直接的调度和限制的目的,权重取值范围100-1000.通过以下两个文件进行配置. blkio.weight 默认值 blkio.weight_device 块设备级的值 (major:minor weight) (优先级高于blkio.weight) 例子

深入理解 Linux Cgroup 系列(一):基本概念

原文链接:深入理解 Linux Cgroup 系列(一):基本概念 Cgroup 是 Linux kernel 的一项功能:它是在一个系统中运行的层级制进程组,你可对其进行资源分配(如 CPU 时间.系统内存.网络带宽或者这些资源的组合).通过使用 cgroup,系统管理员在分配.排序.拒绝.管理和监控系统资源等方面,可以进行精细化控制.硬件资源可以在应用程序和用户间智能分配,从而增加整体效率. cgroup 和 namespace 类似,也是将进程进行分组,但它的目的和 namespace 不

深入理解 Linux Cgroup 系列(三):内存

原文链接:深入理解 Linux Cgroup 系列(三):内存 通过上篇文章的学习,我们学会了如何查看当前 cgroup 的信息,如何通过操作 /sys/fs/cgroup 目录来动态设置 cgroup,也学会了如何设置 CPU shares 和 CPU quota 来控制 slice 内部以及不同 slice 之间的 CPU 使用时间.本文将把重心转移到内存上,通过具体的示例来演示如何通过 cgroup 来限制内存的使用. 1. 寻找走失内存 上篇文章告诉我们,CPU controller 提

Linux Cgroup浅析

cgroup从2.6.4引入linux内核主线,目前默认已启用该特性.在cgroup出现之前,只能对一个进程做资源限制,比如通过sched_setaffinity设置进程cpu亲和性,使用ulimit限制进程打开文件上限.栈大小等. cgroups是Linux下控制一个(或一组)进程的资源限制机制,全称是control groups,可以对cpu.内存等资源做精细化控制,比如目前很多的Docker在Linux下就是基于cgroups提供的资源限制机制来实现资源控制的:除此之外,开发者也可以指直接

Linux CGroup之freezer

To be continues 参考资料 freezer子系统:http://www.cnblogs.com/lisperl/archive/2012/04/25/2469587.html