CGroup 子系统有控制内存的必威手机官网 Memory,如

3 运营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

IO限制测验

用dd对硬盘举办写操作

# dd if=/dev/sda of=/dev/null &

打开iotop看下IO速度

Total DISK READ : 100.37M/s | Total DISK WRITE : 0.00 B/s

Actual DISK READ: 100.37 M/s | Actual DISK WRITE: 0.00 B/s

TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND

18081 be/4 root 100.37 M/s 0.00 B/s 0.00 % 1.34 % ddif=/dev/sda of=/dev/null

为了调控IO速度,在blkio上创设调节组

# cgcreate -g blkio:/hzmali_test

查看下硬盘号

# ls -l /dev/sda

brw-rw---- 1 root disk 8, 0 Jul 25 22:46 /dev/sda

设置硬盘号和相应的读取速度限制,然后履行同样的指令

# cgset -r blkio.throttle.read_bps_device="8:0 1000000" hzmali_test

# cgexec -g blkio:hzmali_test "dd if=/dev/sda of=/dev/null"

用iotop查看下,速度果然就减低到1M以下

Total DISK READ : 996.55 K/s | Total DISK WRITE : 0.00 B/s

Actual DISK READ: 996.55 K/s | Actual DISK WRITE: 0.00 B/s

TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND

18188 be/4 root 996.55 K/s0.00 B/s 0.00 % 99.99 % dd if=/dev/sda of=/dev/null

实例: cgroup 中对中间 *子cgroup* 的CPU能源支配

对各个 *子cgroup* 的CPU占用率实行调整重视依赖各个 *子cgroup* 的 cpu.shares 文件

直白用试验进度来发话, 在那之中加入了一部分注释.

# 安装需要的软件
apt-get install stress     # 让CPU达到 100% 的压力工具
apt-get install sysstat    # 查看系统CPU, 内存, 磁盘, 网络等资源使用情况的工具

 

2) 内部存款和储蓄器限制实例

限定mysql使用内存为不超过512M
跑三个消耗内部存储器脚本

1 2 3 4 #!/bin/bash<br>x='a'  while [ True ];do      x=$x$x  done;

内部存储器的消耗在不停充实,对其展开界定,使其利用内部存储器在500M以内
[[email protected] ~]# mkdir -p /cgroup/memory/foo 
[[email protected] ~]# echo 524288000 > /cgroup/memory/foo/memory.limit_in_bytes 
[[email protected] ~]# echo 44476 > /cgroup/memory/foo/tasks

内部存款和储蓄器使用得到了卓有作用调节。

 

系统一体化安装

  1. 赢得当前系统的安装

    sysctl -n kernel.sched_rt_period_us # 实时经过调治的单位CPU时间 1 秒 1000000 sysctl -n kernel.sched_rt_runtime_us # 实时经过在 1 秒中实际据有的CPU时间, 0.95秒 950000

其一设置验证实时进程在运作时而不是截然占用CPU的, 每1秒中有0.05秒的日子足以给别的进程运维.

这么既不会对实时进程的响适那时候候间变成太大的震慑, 也制止了实时进度卡住时产生整个系统无响应.

 

  1. 安装实时进度占用CPU时间

地方的私下认可设置中, 实时经过占用 95% 的CPU时间. 假如认为占用的太多或太少, 都以足以调度的.譬如:

sysctl -w kernel.sched_rt_runtime_us=900000    # 设置实时进程每1秒中只占0.9秒的CPU时间
kernel.sched_rt_runtime_us = 900000
sysctl -n kernel.sched_rt_runtime_us 
900000

 

1)cpu限制实例

范围mysql使用二个核,如第二个核,且对该核的接纳不超越二分之一
[[email protected] ~]# mkdir -p /cgroup/cpu/foo/ 
[[email protected] ~]# mkdir -p /cgroup/cpuset/foo/ 
[[email protected] ~]# echo 50000 > /cgroup/cpu/foo/cpu.cfs_quota_us 
[[email protected] ~]# echo 100000 > /cgroup/cpu/foo/cpu.cfs_period_us 
[[email protected] ~]# echo "0" > /cgroup/cpuset/foo/cpuset.mems 
[[email protected] ~]# echo "1" > /cgroup/cpuset/foo/cpuset.cpus 
[[email protected] ~]# echo 28819 > /cgroup/cpu/foo/tasks

内部:28819为mysqld的进程号。

能源支配实例

地点根本介绍资源的局地答辩基础, 上面通过有个别实例演示借使通过 cgroup 来支配进程所运用的 CPU和内部存款和储蓄器 能源.

Linux对CPU 和 内部存款和储蓄器的主宰有关照的 cgroup 子系统 cpuset 和 memory

 

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

留存

from:   and 

CGroup 介绍
CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种能够界定、记录、隔断进度组 (process groups) 所使用的财力能源 (如 cpu memory i/o 等等) 的建制。二〇〇六 年进来 Linux 2.6.24 内核,CGroups 不是斩新成立的,它将经过管理从 cpuset 中脱离出去,小编是 谷歌 的 Paul Menage。CGroups 也是 LXC 为贯彻虚构化所选择的能源管理花招。

CGroup 功效及组成
CGroup 是将随机进度展开分组化管理的 Linux 内核功用。CGroup 自身是提供将经过展开分组化管理的职能和接口的根基结构,I/O 或内部存款和储蓄器的分配调节等现实的能源管理功用是透过那个作用来贯彻的。那些现实的能源管理职能称为 CGroup 子系统或调整器。CGroup 子系统有调控内部存款和储蓄器的 Memory 调节器、调控进程调节的 CPU 调控器等。运营中的内核能够利用的 Cgroup 子系统由/proc/cgroup 来承认。
CGroup 提供了三个 CGroup 虚构文件系统,作为开展分组管理和各子系统安装的客商接口。要利用 CGroup,必得挂载 CGroup 文件系统。那时通过挂载选项钦命使用哪个子系统。

Cgroups提供了以下作用:
1)限制进程组能够运用的能源数量(Resource limiting )。举个例子:memory子系统可感到进度组织设立定一个memory使用上限,一旦进度组使用的内部存款和储蓄器达到限额再提请内部存款和储蓄器,就能够出发OOM(out of memory)。
2)进度组的预先级调控(Prioritization )。比如:能够运用cpu子系统为某些进程组分配一定cpu share。
3)记录进度组使用的能源数量(Accounting )。举例:能够利用cpuacct子系统记录有个别进度组使用的cpu时间
4)进度组隔开(Isolation)。比如:使用ns子系统能够使差别的进程组使用区别的namespace,以达到隔开的指标,分歧的长河组有各自的进程、互连网、文件系统挂载空间。
5)进程组决定(Control)。比如:使用freezer子系统能够将经过组挂起和出山小草。

CGroup 帮助的文书系列
表 1. 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 相关概念解释
1)职务(task)。在 cgroups 中,任务正是系统的一个进度;
2)调整族群(control group)。调控族群正是一组根据某种规范划分的经过。Cgroups 中的财富支配都以以调节族群为单位落到实处。四个进度能够参预到某些调节族群,也从三个进度组迁移到另叁个调整族群。三个经过组的过程能够采纳cgroups 以调整族群为单位分配的能源,同期面对 cgroups 以调节族群为单位设定的限定;
3)层级(hierarchy)。调整族群能够团体成 hierarchical 的款式,既一颗调控族群树。调节族群树上的子节点调控族群是父节点调控族群的子女,承接父调控族群的特定的性质;
4)子系统(subsystem)。多个子系统正是一个财富调整器,比方 cpu 子系统正是决定 cpu 时间分配的三个调控器。子系统必需叠合(attach)到七个层级上本领起功能,叁个子系统附加到有些层级以往,这些层级上的兼具调节族群都受到这一个子系统的决定。

相互关系
1)每回在系统中创设新层级时,该系统中的全部职务都以十一分层级的暗中认可cgroup(大家誉为 root cgroup,此 cgroup 在创建层级时自动创设,后面在该层级中开创的 cgroup 都以此 cgroup 的遗族)的启幕成员;
2)二个子系统最四只好叠合到多少个层级;
3)七个层级能够附加多少个子系统;
4)八个职责能够是四个 cgroup 的分子,可是那几个 cgroup 必需在差异的层级;
5)系统中的进度(职务)创立子进程(职分)时,该子职责自动成为其父进度所在 cgroup 的分子。然后可依赖供给将该子任务移动到不一样的 cgroup 中,但初阶时它连接承接其父职责的 cgroup。

Cgroup实战

CPU财富支配

各类进度能够攻下CPU多久, 什么日期能够私吞CPU是和类别的调节密切相关的.

Linux系统中有三种调解攻略, 各类调治攻略有其适用的情形, 也很难说哪个种类调解战略是最优的.

Linux的调治攻略可以远瞻代码: include/linux/sched.h

必威手机官网 1

/*
 * Scheduling policies
 */
#define SCHED_NORMAL        0
#define SCHED_FIFO        1
#define SCHED_RR        2
#define SCHED_BATCH        3
/* SCHED_ISO: reserved but not implemented yet */
#define SCHED_IDLE        5
/* Can be ORed in to make sure the process is reverted back to SCHED_NORMAL on fork */
#define SCHED_RESET_ON_FORK     0x40000000

必威手机官网 2

 

Linux 系统也提供了退换调解计谋的指令和系统调用接口.

调用接口请查询有关文书档案, 这里根本介绍一下修改调整战术的下令 - chrt.

必威手机官网 3

# 在一个终端中执行
sleep 1000
# 打开另一个终端
ps -ef | grep sleep  # 找出 sleep 1000 的pid, 这里假设是 1234
chrt -p 1234         # 可以查看 pid=1234 的进程的 调度策略, 输入如下:
      pid 1234's current scheduling policy: SCHED_OTHER
      pid 1234's current scheduling priority: 0

chrt -p -f 10 1234   # 修改调度策略为 SCHED_FIFO, 并且优先级为10
chrt -p 1234         # 再次查看调度策略
      pid 1234's current scheduling policy: SCHED_FIFO
      pid 1234's current scheduling priority: 10

必威手机官网 4

 

补充:

  1. chrt 也能够一贯钦点一条命令, 并设置这条命令的预先级的调治战略, 具体查看 chrt --help
  2. 翻开二个经过的调整计谋, 除了运用 chrt 命令之外, 还能 cat /proc/<PID>/sched

 

图 2. CGroup 规范应用架构图

如图 2 所示,CGroup 能力能够被用来在操作系统底层限制物理资源,起到 Container 的效果。图中每三个 JVM 进程对应一个 Container Cgroup 层级,通过 CGroup 提供的各个子系统,能够对每三个 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文档

Cgroup的利用细节,子系统和参数设置都能够能够在中找到,承接等性情由于篇幅所限,能够看下文书档案

驷不及舌介绍Linux下, 假如对经过的CPU和内部存款和储蓄器能源的利用景况开展支配的不二秘技。

本文由必威发布于必威-运维,转载请注明出处:CGroup 子系统有控制内存的必威手机官网 Memory,如

相关阅读