www.hj8828.com 1

Cgroup和Namespace在测试中的使用(上)

Linux下CGroup进行CPU、内部存款和储蓄器等能源支配,linuxcgroup

留存

from:   and 

CGroup 介绍
CGroup 是 Control Groups 的缩写,是 Linux
内核提供的1种能够界定、记录、隔离进程组 (process groups)
所使用的财力能源 (如 cpu memory i/o 等等) 的建制。2005 年进入 Linux
二.陆.二四 内核,CGroups 不是斩新创建的,它将经过管理从 cpuset
中剥离出去,笔者是 谷歌 的 Paul Menage。CGroups 也是 LXC
为落到实处虚拟化所运用的财富管理手段。

CGroup 作用及组成
CGroup 是将随机进度展开分组化管理的 Linux 内核功用。CGroup
本人是提供将经过展开分组化管理的效用和接口的功底结构,I/O
或内部存储器的抽成调控等切实的财富管理功能是因此这些效应来落到实处的。那个现实的能源管理效果称为
CGroup 子系统或调控器。CGroup 子系统有调整内部存款和储蓄器的 Memory
调整器、调控进程调整的 CPU 调整器等。运维中的内核能够选取的 Cgroup
子系统由/proc/cgroup 来承认。
CGroup 提供了2个 CGroup
虚拟文件系统,作为开始展览分组管理和各子系统设置的用户接口。要选用CGroup,必须挂载 CGroup 文件系统。那时通过挂载选项钦命使用哪个子系统。

Cgroups提供了以下职能:
一)限制进度组能够选择的能源数量(Resource limiting
)。例如:memory子系统可感觉进度组织设立定3个memory使用上限,一旦进度组使用的内部存款和储蓄器达到限额再申请内部存款和储蓄器,就能够出发OOM(out
of memory)。
2)进度组的预先级调整(Prioritization
)。比方:能够采取cpu子系统为有个别进度组分配一定cpu share。
三)记录进程组使用的财富数量(Accounting
)。举个例子:能够使用cpuacct子系统记录有个别进度组使用的cpu时间
四)进度组隔断(Isolation)。比如:使用ns子系统能够使区别的进程组使用差别的namespace,以完毕隔断的指标,区别的长河组有各自的长河、网络、文件系统挂载空间。
伍)进度组决定(Control)。比如:使用freezer子系统能够将经过组挂起和还原。

CGroup 援救的公文体系
表 一. CGroup 辅助的文本连串

文件名 R/W 用途

Release_agent

RW

删除分组时执行的命令,这个文件只存在于根分组

Notify_on_release

RW

设置是否执行 release_agent。为 1 时执行

Tasks

RW

属于分组的线程 TID 列表

Cgroup.procs

R

属于分组的进程 PID 列表。仅包括多线程进程的线程 leader 的 TID,这点与 tasks 不同

Cgroup.event_control

RW

监视状态变化和分组删除事件的配置文件

CGroup 相关概念解释
一)职分(task)。在 cgroups 中,职务正是系统的二个历程;
2)调控族群(control
group)。调节族群就是一组根据某种标准划分的进度。Cgroups
中的能源支配都以以调整族群为单位贯彻。三个历程能够投入到有些调控族群,也从2个进度组迁移到另二个调节族群。三个进度组的长河能够应用
cgroups 以调节族群为单位分配的能源,同时面前蒙受 cgroups
以调控族群为单位设定的限量;
三)层级(hierarchy)。调控族群能够团体成 hierarchical
的方式,既一颗调整族群树。调整族群树上的子节点调整族群是父节点调控族群的孩子,承接父调控族群的特定的质量;
四)子系统(subsystem)。贰个子系统便是三个资源调节器,比如 cpu
子系统就是调整 cpu
时间分配的1个调控器。子系统必须叠合(attach)到一个层级上才具起效果,三个子系统附加到有个别层级以往,这一个层级上的富有调整族群都受到那一个子系统的支配。

相互关系
一)每回在系统中开立异层级时,该连串中的全部任务都以那个层级的暗中同意cgroup(大家称为 root cgroup,此 cgroup
在成立层级时自动创制,前边在该层级中创制的 cgroup 都以此 cgroup
的后生)的开端成员;
2)二个子系列最五只可以叠合到二个层级;
三)1个层级能够增大多个子系统;
肆)一个职务能够是多少个 cgroup 的积极分子,可是那些 cgroup
必须在不相同的层级;
五)系统中的进程(职分)创设子进度(职责)时,该子任务自动变成其父进度所在
cgroup 的成员。然后可依附供给将该子职分移动到分裂的 cgroup
中,但开端时它总是承袭其父职务的 cgroup。

CGroup 介绍

CGroup 是 Control Groups 的缩写,是 Linux
内核提供的一种能够界定、记录、隔开进度组 (process groups)
所使用的财力能源 (如 cpu memory i/o 等等) 的体制。2007 年进入 Linux
二.陆.二肆 内核,CGroups 不是全新创建的,它将经过管理从 cpuset
中退出出去,笔者是 谷歌 的 Paul Menage。CGroups 也是 LXC
为贯彻虚拟化所选用的财富管理花招。

图 1. CGroup 层级图

图 壹 所示的 CGroup 层级关系显得,CPU 和 Memory
三个子系统有和谐单身的层级体系,而又经过 Task Group 获得关联关系。

CGroup 特点
在 cgroups 中,职责便是系统的2个历程。
调控族群(control
group)。调整族群便是1组依据某种标准划分的长河。Cgroups
中的能源支配都以以调控族群为单位完成。二个历程能够投入到某些调控族群,也从二个进程组迁移到另八个调控族群。八个进度组的历程能够行使
cgroups 以调节族群为单位分配的财富,同时面对 cgroups
以调控族群为单位设定的限制。
层级(hierarchy)。调节族群能够团体成 hierarchical
的样式,既1颗调整族群树。调控族群树上的子节点调节族群是父节点调控族群的儿女,承袭父调控族群的特定的个性。
子系统(subsytem)。叁个子连串就是3个财富调整器,例如 cpu
子系统正是决定 cpu
时间分配的八个调控器。子系统必须附加(attach)到三个层级上本事起效果,3个子连串附加到某些层级以后,这几个层级上的享有调整族群都受到那些子系统的调整。

子系统的介绍
blkio —
这些子系统为块设备设定输入/输出限制,比方物理设备(磁盘,机械硬盘,USB
等等)。
cpu — 那个子系统选用调治程序提供对 CPU 的 cgroup 任务访问。
cpuacct — 这几个子系统自动生成 cgroup 中职责所利用的 CPU 报告。
cpuset — 这些子系统为 cgroup 中的职分分配独立
CPU(在多核系统)和内部存款和储蓄器节点。
devices — 那个子系统可允许或许拒绝 cgroup 中的职分访问设备。
freezer — 那几个子系统挂起也许苏醒 cgroup 中的职分。
memory — 这几个子系统设定 cgroup
中职责选取的内部存款和储蓄器限制,并自动生成由那么些职务接纳的内部存款和储蓄器财富报告。
net_cls — 那几个子系统应用阶段识别符(classid)标志互联网数据包,可允许
Linux 流量调节造进度序(tc)识别从具体 cgroup 中生成的数据包。

CGroup 功效及组成

CGroup 是将随机进程打开分组化管理的 Linux 内核效能。CGroup
自身是提供将经过打开分组化管理的意义和接口的功底结构,I/O
或内部存款和储蓄器的分红调整等具体的能源管理效果是由此那些效应来达成的。那个现实的能源管理效率称为
CGroup 子系统或调节器。CGroup 子系统有支配内部存储器的 Memory
调整器、调节进程调治的 CPU 调控器等。运转中的内核能够接纳的 Cgroup
子系统由/proc/cgroup 来确认。

CGroup 提供了二个 CGroup
虚拟文件系统,作为实行分组处理和各子系统设置的用户接口。要运用
CGroup,必须挂载 CGroup 文件系统。那时通过挂载选项内定使用哪个子系统。

Cgroups提供了以下职能:
    一.限量进程组能够选用的能源数量(Resource limiting
)。比方:memory子系统可以为进度组织设立定一个memory使用上限,1旦进度组使用的内部存款和储蓄器到达限额再提请内部存款和储蓄器,就能出发OOM(out
of memory)。
    2.经过组的开始时期级调整(Prioritization
)。比方:能够选用cpu子系统为有个别进度组分配一定cpu share。
    三.记下进度组使用的财富数量(Accounting
)。比方:能够使用cpuacct子系统记录有个别进程组使用的cpu时间
   
肆.进程组隔开(Isolation)。譬如:使用ns子系统能够使不一样的进度组使用不相同的namespace,以达到隔断的指标,分歧的长河组有各自的长河、互连网、文件系统挂载空间。
   
5.进度组调控(Control)。举个例子:使用freezer子系统能够将经过组挂起和还原。

重重时候必要测试程序在能源受限情状下的展现,普通的做法恐怕是不停对系统加压使能够分配给指标程序的财富降少,换另3个思路思虑,能够品味限制分配给指标程序的财富总的数量,使得机器状态符合规律的动静下让程序资源采纳到达饱和。

图 二. CGroup 规范应用架构图

如图 2 所示,CGroup 才具能够被用来在操作系统底层限制物理能源,起到
Container 的成效。图中每一个 JVM 进度对应2个 Container Cgroup
层级,通过 CGroup 提供的各样子系统,能够对每3个 JVM
进度对应的线程品级举办物理限制,那个限制包括CPU、内存等等多数门类的财富。下一部分会切实对应用程序实行 CPU
能源隔开实行现身说法。

cgroup的安装
实则安装比很粗大略,最好实践正是yum直接设置(centos下)

布置文件

1 2 3 4 5 6 7 8 9 10 [[email protected] ~]# vim /etc/cgconfig.conf mount {          cpuset  = /cgroup/cpuset;                           cpu     =/cgroup/cpu;                           cpuacct =/cgroup/cpuacct;                           memory  =/cgroup/memory;                           devices =/cgroup/devices;                           freezer =/cgroup/freezer;                           net_cls =/cgroup/net_cls;                           blkio   =/cgroup/blkio;                                      }

cgroup section的语法格式如下:
group <name> { 
     [<permissions>] 
     <controller> { 
        <param name> = <param value>; 
        … 
     } 
      …}

其中:
name: 指定cgroup的名称
permissions:可挑选,钦赐cgroup对应的挂载点文件系统的权柄,root用户具有具有权力。
controller:子系统的称呼
param name 和 param value:子系统的习性及其属性值

CGroup 协理的文件连串

作为2个正值做着容器项指标人,知道容器才能是依据Cgroup和Namespace来落成的。在容器中,cpu和内部存款和储蓄器财富是运用Cgroup来调控,PID、IPC、网络等能源是透过Namespace来划分。在先后尚未布置在容器的图景下,大家还是能够运用Cgoup和Namespace来组织场景实现都部队分特别测试,如选取Cgroup的能源支配效果做能源满载的测试;利用Namespace的财富隔开分离特性做一些互联网特别测试而不影响其余程序的运营。

一.配备对mysql实例的能源限制

1.1 修改cgconfig.conf文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 mount      cpuset  =/cgroup/cpuset     cpu =/cgroup/cpu     cpuacct =/cgroup/cpuacct     memory  =/cgroup/memory     blkio   =/cgroup/blkio     group mysql_g1 {        cpu {              cpu.cfs_quota_us = 50000;              cpu.cfs_period_us = 100000;           cpuset {                cpuset.cpus ="3";                cpuset.mems ="0";        }        cpuacct{               memory {                memory.limit_in_bytes=104857600;              memory.swappiness=0;              # memory.max_usage_in_bytes=104857600;              # memory.oom_control=0;      }       blkio  {             blkio.throttle.read_bps_device="8:0 524288"            blkio.throttle.write_bps_device="8:0 524288"     }   }

一.二 配置文件的一些解释
cpu:cpu使用时间限额

cpu.cfs_period_us和cpu.cfs_quota_us来限制该组中的全部进程在单位时间里能够行使的cpu时间。这里的cfs是截然公平级调动度器的缩写。cpu.cfs_period_us正是时刻周期(阿秒),默以为一千00,即百纳秒。cpu.cfs_quota_us就是在那时期内可使用的cpu时间(皮秒),私下认可-一,即无界定。(cfs_quota_us是cfs_period_us的两倍就能够限定在双核上完全选拔)。
cpuset:cpu绑定
咱俩限制该组只幸而0壹共三个超线程上运转。cpuset.mems是用来设置内部存储器节点的。
本例限制使用超线程0上的第九个cpu线程。
实际cgconfig相当于帮您把布置文件中的配置整理到/cgroup/cpuset那几个目录里面,例如你要求动态设置mysql_group1/
cpuset.cpus的CPU超线程号,能够使用如下的法子。
[[email protected]
~]# echo “0” > mysql_group1/ cpuset.cpus
cpuacct:cpu能源报告
memory:内部存款和储蓄器限制
 
内部存款和储蓄器限制大家第3限制了MySQL可以采用的内部存款和储蓄器最大尺寸memory.limit_in_bytes=25陆M。而设置swappiness为0是为了让操作系统不会将MySQL的内部存储器无名氏页互换出去。
blkio:BLOCK IO限额
blkio.throttle.read_bps_device=”8:0 524288″; #每秒读数据上限
blkio.throttle.write_bps_device=”8:0 524288″; #每秒写多少上限
内部八:0对应主设备号和副设备号,能够透过ls -l /dev/sda查看
[[email protected]
~]# ls -l /dev/sda 
brw-rw—-. 1 root disk 8, 0 Sep 15 04:19 /dev/sda

一.三 拓展文化
方今较新的服务器CPU都是numa结构<非同等内部存款和储蓄器访问结构(NUMA:Non-Uniform
Memory Access)>,使用numactl
–hardware能够旁观numa种种节点的CPU超线程号,以及对应的节点号。

本例结果如下:
[[email protected]
~]# numactl –hardware 
available: 1 nodes (0) 
node 0 cpus: 0 1 2 3 
node 0 size: 1023 MB 
node 0 free: 68 MB 
node distances: 
node 0 
0: 10 
以下是较高档服务器的numa新闻,仅作参照
[[email protected]
~]# numactl –hardware 
available: 4 nodes (0-3) 
node 0 cpus: 0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 
node 0 size: 16338 MB 
node 0 free: 391 MB 
node 1 cpus: 1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 
node 1 size: 16384 MB 
node 1 free: 133 MB 
node 2 cpus: 2 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62 
node 2 size: 16384 MB 
node 2 free: 137 MB 
node 3 cpus: 3 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63 
node 3 size: 16384 MB 
node 3 free: 186 MB 
node distances: 
node 0 1 2 3 
0: 10 20 30 20 
1: 20 10 20 30 
2: 30 20 10 20 
3: 20 30 20 10

1.4 修改cgrules.conf文件
[[email protected]
~]# vim /etc/cgrules.conf 
# /etc/cgrules.conf 
#The format of this file is described in cgrules.conf(5) 
#manual page. 

# Example: 
#<user> <controllers> <destination> 
#@student cpu,memory usergroup/student/ 
#peter cpu test1/ 
#% memory test2/ 
*:/usr/local/mysql/bin/mysqld * mysql_g1 
注:共分为2个部分,分别为索要限制的实例,限制的剧情(如cpu,memory),挂载指标。

表 一. CGroup 帮忙的公文体系
文件名 R/W 用途

Release_agent

RW

删除分组时执行的命令,这个文件只存在于根分组

Notify_on_release

RW

设置是否执行 release_agent。为 1 时执行

Tasks

RW

属于分组的线程 TID 列表

Cgroup.procs

R

属于分组的进程 PID 列表。仅包括多线程进程的线程 leader 的 TID,这点与 tasks 不同

Cgroup.event_control

RW

监视状态变化和分组删除事件的配置文件

Cgroup介绍

Cgroup是开始展览分组化管理的Linux内核效能,具体的财富管理是通过子系统来成功的。能够精晓为子系统就是财富调控器,每个子系统就是一个能源的分配器,比方cpu子系统是调整cpu时间分配的,使用办法如下

二 使配置生效

[[email protected]
~]# /etc/init.d/cgconfig restart 
Stopping cgconfig service: [ OK ] 
Starting cgconfig service: [ OK ] 
[[email protected]
~]# /etc/init.d/cgred restart 
Stopping CGroup Rules Engine Daemon… [ OK ] 
Starting CGroup Rules Engine Daemon: [ OK ] 
注:重启顺序为cgconfig -> cgred
,更换配置文件后七个服务须求重启,且顺序无法错。

CGroup 相关概念解释

  1. 职分(task)。在 cgroups 中,职分正是系统的八个进度;

  2. 调整族群(control
    group)。调整族群正是一组遵照某种标准划分的进度。Cgroups
    中的能源支配都以以控制族群为单位完成。三个进程能够参预到某些调控族群,也从二个过程组迁移到另三个调控族群。2个经过组的长河能够动用
    cgroups 以调整族群为单位分配的能源,同时受到 cgroups
    以调整族群为单位设定的限量;

  3. 层级(hierarchy)。调整族群能够组织成 hierarchical
    的情势,既1颗调节族群树。调整族群树上的子节点调控族群是父节点调节族群的男女,继承父调整族群的一定的属性;

  4. 子系统(subsystem)。三个子类别正是三个能源调整器,譬如 cpu
    子系统就是决定 cpu
    时间分配的1个调节器。子系统必须叠合(attach)到八个层级上技艺起成效,叁个子系统附加到某些层级以往,这些层级上的有着调控族群都受到这些子系统的垄断。

相互关系

  1. 历次在系统中开立异层级时,该系列中的全部任务都以万分层级的暗中同意cgroup(大家称为 root cgroup,此 cgroup
    在创制层级时自动创造,后边在该层级中开创的 cgroup 都以此 cgroup
    的后生)的起来成员;

  2. 1个子种类最两只好叠合到三个层级;

  3. 2个层级能够增大三个子系统;

  4. 1个义务能够是多个 cgroup 的成员,可是这一个 cgroup 必须在分歧的层级;

  5. 系统中的进度(职务)创造子进度(职分)时,该子义务自动成为其父进度所在
    cgroup 的成员。然后可依赖须要将该子职务移动到不相同的 cgroup
    中,但初始时它连接传承其父任务的 cgroup。

安装(ubuntu)

#apt-get install cgroup-bin

叁 运行MySQL,查看MySQL是还是不是处于cgroup的限量中

[[email protected]
~]# ps -eo pid,cgroup,cmd | grep -i mysqld 
29871
blkio:/;net_cls:/;freezer:/;devices:/;memory:/;cpuacct:/;cpu:/;cpuset:/
/bin/sh ./bin/mysqld_safe –defaults-file=/etc/my.cnf
–basedir=/usr/local/mysql/ –datadir=/usr/local/mysql/data/
30219
blkio:/;net_cls:/;freezer:/;devices:/;memory:/;cpuacct:/;cpu:/;cpuset:/mysql_g1
/usr/local/mysql/bin/mysqld –defaults-file=/etc/my.cnf
–basedir=/usr/local/mysql/ –datadir=/usr/local/mysql/data/
–plugin-dir=/usr/local/mysql//lib/plugin –user=mysql
–log-error=/usr/local/mysql/data//localhost.localdomain.err
–pid-file=/usr/local/mysql/data//localhost.localdomain.pid
–socket=/tmp/mysql.sock –port=3306
30311
blkio:/;net_cls:/;freezer:/;devices:/;memory:/;cpuacct:/;cpu:/;cpuset:/
grep -i mysqld

图 1. CGroup 层级图

宗旨命令

cgclassify —
cgclassify命令是用来将运转的职责移动到2个要么四个cgroup。

cgclear — cgclear
命令是用来删除层级中的全体cgroup。

cgconfig.conf —
在cgconfig.conf文件中定义cgroup。

cgconfigparser —
cgconfigparser命令分析cgconfig.conf文件和并挂载层级。

cgcreate —
cgcreate在层级中成立新cgroup。

cgdelete —
cgdelete命令删除钦定的cgroup。

cgexec —
cgexec命令在钦点的cgroup中运转任务。

cgget — cgget命令展现cgroup参数。

cgred.conf —
cgred.conf是cgred服务的布置文件。

cgrules.conf — cgrules.conf
包含用来支配什么日期职责术语有些 cgroup的平整。

cgrulesengd — cgrulesengd 在 cgroup
中公布职务。

cgset — cgset 命令为 cgroup
设定参数。

lscgroup — lscgroup 命令列出层级中的
cgroup。

lssubsys — lssubsys
命令列出含有钦命子系统的层级

肆 财富限制验证

采取mysqlslap对mysql进行压力测试,看mysql使用财富是或不是超过限制

四.1 在shell窗口1用mysqlslap对mysql进行压力测试
[[email protected]
~]# /usr/local/mysql/bin/mysqlslap –defaults-file=/etc/my.cnf
–concurrency=150 –iterations=1 –number-int-cols=8 –auto-generate-sql
–auto-generate-sql-load-type=mixed –engine=innodb
–number-of-queries=100000 -ujesse -pjesse –number-char-cols=35
–auto-generate-sql-add-autoincrement –debug-info -P3306 -h127.0.0.1

四.二 在shell窗口二查看mysql对cpu,内部存款和储蓄器的利用

看得出:cpu限制在了第陆个基本上,且对第多少个着力的行使限制在2/四。

4.3 在shell窗口3查看io的消耗

足见:mysql对io的读及写消耗均限制在二M每秒以内。

www.hj8828.com 1

图 一 所示的 CGroup 层级关系显得,CPU 和 Memory
七个子系统有投机独立的层级种类,而又经过 Task Group 取得关联关系。

子系统验证

能够运用lssubsys
-a来列出体系支持多少种子系统,和:比如cpu是决定cpu时间片的,memory是决定内部存款和储蓄器使用的

#lssubsys -a

cpuset

cpu,cpuacct

memory

devices

freezer

net_cls,net_prio

blkio

perf_event

hugetlb

重中之重的两种子系统验证如下:

blkio
这么些子系统设置限定种种块设备的输入输出调节。举个例子:磁盘,光盘以及usb等等。

cpu
那几个子系统应用调整程序为cgroup职分提供cpu的拜访。

cpuacct 发生cgroup职分的cpu能源报告。

cpuset 假如是多为重的cpu,那几个子系统会为cgroup义务分配单独的cpu和内部存款和储蓄器。

devices 允许或拒绝cgroup职责对设施的访问。

freezer 暂停和还原cgroup任务。

memory 设置每种cgroup的内部存款和储蓄器限制以及爆发内部存款和储蓄器能源报告。

net_cls 标识各个网络包以供cgroup方便使用。

ns 名称空间子系统

perf_event:
扩展了对每group的监测追踪的本领,即能够监测属于有个别特定的group的全部线程以及运营在特定CPU上的线程

要为Cgroup分配限制的财富,首先要挂载子系统,然后才有调节组,譬喻想要对指标程序实行内部存款和储蓄器限制,那就须要挂载memory子系统

利用lssubsys -am来展现已经挂载的子系统

#lssubsys -am

cpuset /sys/fs/cgroup/cpuset

cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct

www.hj8828.com,memory /sys/fs/cgroup/memory

devices /sys/fs/cgroup/devices

freezer /sys/fs/cgroup/freezer

net_cls,net_prio /sys/fs/cgroup/net_cls,net_prio

blkio /sys/fs/cgroup/blkio

perf_event /sys/fs/cgroup/perf_event

hugetlb /sys/fs/cgroup/hugetlb

可以手动挂载或许卸载子系统,如进行umount /sys/fs/cgroup/memory,memory子系统就被卸载了,那时候手动施行# mount -t cgroup -o memory memory /sys/fs/cgroup/memory就又挂载上了。
要保管需求的子系统都挂上了,不然成立调节组的时候会报错 is not mounted

#cgcreate -g memory,cpu:/hzmali_test

cgcreate: can’t create cgroup /hzmali_test: Cgroup one of the
needed subsystems is not mounted

怎么样成立control group(即须求财富管理的组)呢,
这里用cgcreate命令,当然也可能有任何方法, 如cgconfig.conf等

#cgcreate -g memory,cpu:/hzmali_test

此处有个基本点特点:3个组能够而且做八个能源的限制,如这里作者还要限定了memory和cpu,然后memory和cpu子系统目录下会自动生成那么些组的目录和些文件,如memory

#/sys/fs/cgroup/memory/hzmali_test$ ls -lrt

-rw-r–r– 1 root root 0 Jul 26
20:56
tasks

-rw-r–r– 1 root root 0 Jul 26
20:56
notify_on_release

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.use_hierarchy

-r–r–r– 1 root root 0 Jul 26
20:56
memory.usage_in_bytes

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.swappiness

-r–r–r– 1 root root 0 Jul 26
20:56
memory.stat

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.soft_limit_in_bytes

———- 1 root root 0 Jul 26
20:56
memory.pressure_level

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.oom_control

-r–r–r– 1 root root 0 Jul 26
20:56
memory.numa_stat

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.move_charge_at_immigrate

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.max_usage_in_bytes

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.limit_in_bytes

-r–r–r– 1 root root 0 Jul 26
20:56
memory.kmem.usage_in_bytes

-r–r–r– 1 root root 0 Jul 26
20:56
memory.kmem.tcp.usage_in_bytes

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.kmem.tcp.max_usage_in_bytes

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.kmem.tcp.limit_in_bytes

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.kmem.tcp.failcnt

-r–r–r– 1 root root 0 Jul 26
20:56
memory.kmem.slabinfo

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.kmem.max_usage_in_bytes

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.kmem.limit_in_bytes

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.kmem.failcnt

–w——- 1 root root 0 Jul 26
20:56
memory.force_empty

-rw-r–r– 1 root root 0 Jul 26
20:56
memory.failcnt

-rw-r–r– 1 root root 0 Jul 26
20:56
cgroup.procs

–w–w–w- 1 root root 0 Jul 26
20:56
cgroup.event_control

-rw-r–r– 1 root root 0 Jul 26
20:56
cgroup.clone_children

文本过多,选多少个关键的讲下:

  • tasks 能够将想要限制能源的长河都加到那一个文件中
  • memory.max_usage_in_bytes内部存款和储蓄器的最大使用量,用来限制财富
    memory.soft_limit_in_bytes 和 memory.limit_in_bytes
    的反差是,这几个限制并不会阻拦进度使用抢先限额的内部存款和储蓄器,只是在系统内部存款和储蓄器不足时,会先行回收超越限额的历程占用的内部存款和储蓄器,使之向限定值靠拢。
  • memory.oom_control
    涵盖3个评释(0或一)来开启恐怕关闭cgroup的OOM
    killer。假如翻开(壹),职务假设尝试申请内部存款和储蓄器超越允许,就能够被系统OOM
    killer终止。OOM
    killer在每一个使用cgroup内部存款和储蓄器子系统中都是默许开启的。假设要求关闭,则足以向memory.oom_control文件写入一:

# echo 1 > /sys/fs/cgroup/memory.oom_control
要是OOM
killer关闭,那么进度尝试申请的内存抢先允许,那么它就能够被中断,直到额外的内部存款和储蓄器被放出

  • memory.mem.usage_in_bytes
    当前历程内存用量,因为现在还未有经过加到组里,正是0了
  • memory.mem.failcnt显示内部存款和储蓄器达到限制值的次数

cgroup实例深入分析(手工动态验证)

苏醒配置文件/etc/cgconfig.conf及/etc/cgrules.conf
为暗中认可配置。测试实例还是为mysql,测试工具为mysqlslap。

开启cgconfig及cgrules 服务
[[email protected]
~]# /etc/init.d/cgconfig restart 
Stopping cgconfig service: [ OK ] 
Starting cgconfig service: [ OK ] 
[[email protected]
/]# /etc/init.d/cgred restart 
Stopping CGroup Rules Engine Daemon… [ OK ] 
Starting CGroup Rules Engine Daemon: [ OK ]

敞开mysqlslap压力测试程序
[[email protected]
/]# /usr/local/mysql/bin/mysqlslap –defaults-file=/etc/my.cnf
–concurrency=150 –iterations=1 –number-int-cols=8 –auto-generate-sql
–auto-generate-sql-load-type=mixed –engine=innodb
–number-of-queries=100000 -ujesse -pjesse –number-char-cols=35
–auto-generate-sql-add-autoincrement –debug-info -P3306 -h127.0.0.1

经过htop查看财富消耗。

CGroup 特点

在 cgroups 中,义务正是系统的一个进程。

调整族群(control
group)。调整族群就是1组依照某种典型划分的历程。Cgroups
中的能源支配都是以调整族群为单位完毕。一个进度能够参与到有个别调控族群,也从2个进度组迁移到另二个调控族群。2个经过组的进度能够利用
cgroups 以调整族群为单位分配的能源,同时受到 cgroups
以调控族群为单位设定的范围。

层级(hierarchy)。调控族群能够组织成 hierarchical
的款式,既一颗调控族群树。控制族群树上的子节点调节族群是父节点调控族群的孩子,承袭父控制族群的一定的性质。

子系统(subsytem)。3个子种类正是多个财富控制器,比如 cpu
子系统正是决定 cpu
时间分配的3个调节器。子系统必须叠合(attach)到一个层级上手艺起功效,1个子系统附加到有些层级未来,这几个层级上的有着调控族群都受到那几个子系统的决定。

Cgroup文档

Cgroup的应用细节,子系统和参数设置都足以能够在中找到,承继等特色由于篇幅所限,能够看下文档