• linux cgroup


    题记: cgroup早该学习了

    缘起:

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

    该看看cgroup了

    1. 上网查文档
    2. 安装:
    3. 配置
      /etc/cgconfig.conf 添加:

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

      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

  • 相关阅读:
    PAT-乙级-1034. 有理数四则运算(20)
    PAT-乙级-1033. 旧键盘打字(20)
    PAT-乙级-1032. 挖掘机技术哪家强(20)
    PAT-乙级-1031. 查验身份证(15)
    PAT-乙级-1030. *完美数列(25)
    PAT-乙级-1029. 旧键盘(20)
    PAT-乙级-1028. 人口普查(20)
    PAT-乙级-1027. 打印沙漏(20)
    PAT-乙级-1026. 程序运行时间(15)
    PAT-乙级-1025. 反转链表 (25)
  • 原文地址:https://www.cnblogs.com/mycls/p/5922431.html
Copyright © 2020-2023  润新知