LXC(linux container) 之 cgroup

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-22 15:14:36

  在学习了解docker的时候介绍到LXC(Linux Container)和Cgroup的概念,菜鸟一枚,所以先学习了解下什么是Cgroup

  Cgroup是将任意进程进行分组化管理的Linux内核功能。cgroup本身提供将进程进行分组化管理的功能和接口的基础结构。这里的分组化管理限制某个进程或者某些进程使用资源的过程,也就是所谓实现一组容器。在这个容器中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等。于是就出现了cgroup的概念,cgroup就是controller group,最初由google的工程师提出,后来被整合进Linux内核中。

 

一、基本概念

  Cgroup:  controller group  

  task:
  一个进程

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

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

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

二、安装和启动

  以centos为例 安装cgroup

   yum install libcgroup

  启动方式

    对于yum 安装的服务,启动可以采用  service cgconfig start/stop/restart

    或者采用 /etc/init.d/cgconfig start/stop/restart

  cgconfig启动的时候默认读取/etc/cgconfig.conf ,根据其配置来创建或者挂载指定的cgroup子系统

三、配置

  cgroup详细配置在 /etc/cgconfig.conf 里面

  

  1,mount section

mount {
<controller> = <path>;
...
}
#########################################
# controller:内核子系统的名称
# path:该子系统的挂载点
#########################################

  目的是在 /etc/cgroup下面创建对应的目录并且挂载对应的controller到 path下面去。

  /etc/cgconfig.conf 里面除了配置mount section外 也可以配置group section

  2,group section

group <name> {
    [<permissions>]
    <controller> {
        <param name> = <param value>;
        …
    }
    …
}
################################################################################
## name: 指定cgroup的名称
## permissions:可选项,指定cgroup对应的挂载点文件系统的权限,root用户拥有所有权限。
## controller:子系统的名称
## param name 和 param value:子系统的属性及其属性值
#################################################################################

  创建对应的cgroup 'name' ,并且设置权限。

  定义子系统的属性及其值等

四、进程加入到cgroup

  当创建好配置并且启动cgconfig之后,就会在对应的目录下面产生相关的限制配置文件。e.g.

[root@testserver cgroup]# ls -lart memory.*
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.use_hierarchy
-r--r--r-- 1 root root 0  8月  4 15:07 memory.usage_in_bytes
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.swappiness
-r--r--r-- 1 root root 0  8月  4 15:07 memory.stat
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.soft_limit_in_bytes
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.move_charge_at_immigrate
-r--r--r-- 1 root root 0  8月  4 15:07 memory.memsw.usage_in_bytes
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.memsw.max_usage_in_bytes
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.memsw.limit_in_bytes
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.memsw.failcnt
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.max_usage_in_bytes
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.limit_in_bytes
--w------- 1 root root 0  8月  4 15:07 memory.force_empty
-rw-r--r-- 1 root root 0  8月  4 15:07 memory.failcnt

  在当前文件夹下面有个特殊的文件

[root@testserver cgroup]# ls -lart tasks
-rw-r--r-- 1 root root 0  8月  4 15:07 tasks

  只要把需要限制的进程加入到这个文件就可以达到预期的目标

echo "xxxx" >>tasks

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!