Cgroup初探

在生产环境中,运行在服务器中的程序如果对系统资源(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-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值