Cgroups概述
从 2.6.24 版本开始,linux 内核提供了一个叫做 Cgroups的特性。Cgroups是control groups的缩写,是一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如cpu,memory,IO等)的机制。

tasks 和 cgroups.procs 是用来管理控制组中的进程的。要把一个进程加入到某个控制组,把 pid 写入到相应目录的 tasks 文件即可。如
# echo 5678 >/cgroup/cpu/rule3001/tasks
就把 5678 进程加入到了 rule3001控制组。那么 tasks 和 cgroups.procs 有什么区别呢?前面说的对“进程”的管理限制其实不够准确。系统对任务调度的单位是线程。在这里,tasks 中看到的就是线程 id。而 cgroups.procs 中是线程组 id,也就是一般所说的进程 id 。将一个一般的 pid 写入到 tasks 中,只有这个 pid 对应的线程,以及由它产生的其他进程、线程会属于这个控制组,原有的其他线程则不会。而写入 cgroups.procs 会把当前所有的线程都加入进去。如果写入 cgroups.procs 的不是一个线程组 id,而是一个一般的线程 id,那会自动找到所对应的线程组 id 加入进去。进程在加入一个控制组后,控制组所对应的限制会即时生效。想知道一个进程属于哪些控制组,可以通过 cat /proc/<pid>/cgroup 查看。
cpu.cfs_period_us 时间周期
cpu.cfs_quota_us 在时间周期内可使用的 cpu 时间
cpu.cfs_quota_us 也是可以大于 cpu.cfs_period_us 的,这主要是对于多核情况。有 n 个核时,一个控制组中的进程自然最多就能用到 n 倍的 cpu 时间。
cpu.rt_period_us
cpu.rt_runtime_us
这两个对应的是实时进程的限制,平时可能不会有机会用到。
cpu.shares 不是限制进程能使用的绝对的 cpu 时间,而是控制各个组之间的配额。
比如
/cpu/cpu.shares : 1024
/cpu/foo/cpu.shares : 2048
那么当两个组中的进程都满负荷运行时,/foo 中的进程所能占用的 cpu 就是 / 中的进程的两倍。如果再建一个 /foo/bar 的 cpu.shares 也是 1024,且也有满负荷运行的进程,那 /、/foo、/foo/bar 的 cpu 占用比就是 1:2:1 。前面说的是各自都跑满的情况。如果其他控制组中的进程闲着,那某一个组的进程完全可以用满全部 cpu。可见通常情况下,这种方式在保证公平的情况下能更充分利用资源。
cpu.stat
nr_periods 219736029
nr_throttled 0
throttled_time 0
nr_periods、nr_throttled 就是总共经过的周期,和其中受限制的周期。throttled_time 就是总共被控制组掐掉的 cpu 使用时间。
7. 用 cgroups 管理IO资源

blkio 子系统里大部分都是只读的状态报告,可写的参数就只有下面这几个:
blkio.throttle.read_bps_device
blkio.throttle.read_iops_device
blkio.throttle.write_bps_device
blkio.throttle.write_iops_device
blkio.weight
blkio.weight_device
这些都是用来控制进程的磁盘 io 的。
blkio子模块有2种限制模式:
1. throttle,限制每个进程能使用的IOPS或者吞吐量。
2. weight,限制每个进程能使用的IOPS的能力的比例,必须通过CFQ调度器来实现。
blkio子系统里有很多统计项,通过这些统计项更好地统计、监控进程的 io 情况。
blkio.io_merged 各设备中各类型 io 请求合并的次数
blkio.io_queued 各设备中各类型 io 请求当前在队列中的数量
blkio.io_service_bytes 各类型 io 换入者或出各设备的字节数
blkio.io_serviced 各设备中执行的各类型 io 操作数,分read、write、sync、async 和 total
blkio.io_service_time 各设备中执行的各类型 io 时间,单位微秒
blkio.io_wait_time 各设备中各类型 io 在队列中的 等待时间
blkio.sectors 换入或者换出各设备的扇区数
blkio.time 各设备的 io 访问时间,单位毫秒
参考:
http://www.cnblogs.com/lisperl/archive/2013/01/14/2860353.html#2761494
http://xiezhenye.com/2013/10/linux-cgroups-%E6%A6%82%E8%BF%B0.html
Cgroups概述的更多相关文章
- cgroups简单使用
Cgroups控制系统资源的分配(cpu.mem.io) 1.cgroups概述 CGroup是Linux内核提供的可以限制.隔离进程组 (process groups) 所使用的物理资源 (如 cp ...
- Linux操作系统(第二版)(RHEL 8/CentOS 8)
Linux操作系统(第二版)(RHEL 8/CentOS 8) http://www.tup.tsinghua.edu.cn/booksCenter/book_08172501.html Linux操 ...
- Using YARN with Cgroups testing in sparkml cluster
部署服务器: sparkml 集群 ########### sparkml ########## sparkml-node1 # yarn resource manager sparkml-node2 ...
- 1、Docker概述与安装
1.Docker概述 原文地址:https://docs.docker-cn.com/engine/docker-overview/#docker-engine Docker是一个开发,集装,运行应用 ...
- docker学习笔记(1)概述、原理学习、常用命令
一.Docker概述 Docker是基于Go语言实现的云开源项目,诞生于2013年初,目前主流的Linux操作系统已支持Docker,如Redhat RHEL6.5/CentOS6.5.Ubuntu ...
- Hadoop - YARN 概述
一 概述 Apache Hadoop YARN (Yet Another Resource Negotiator,还有一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源 ...
- docker概述和安装及基本操作
一:概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用 ...
- docker概述和安装
一:概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用 ...
- Docker(1)--概述
Docker概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,您可以以与管理应用程序相同的方式来管理 ...
随机推荐
- DateTime.ToString()
/* [y]代表年份,注意是小写的y,大写的Y并不代表年份. [M]表示月份. [d]表示日期,注意D并不代表什么. ...
- Linux与Windows中动态链接库的分析与对比
摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理.但不同操作系 ...
- Comet、SSE、Web Socket
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(十一) Comet Comet是一种更加高级的Ajax技术("服务器推送&qu ...
- [转载]Dotfuscator Professional Edition 4.9.7500.9484 混淆工具破解版+使用教程
如有转载,请注明出处: http://www.cnblogs.com/flydoos/archive/2012/01/26/2329536.html Dotfuscator Professional ...
- uva 108
降维 枚举行累加 然后求单行上最大连续和 #include <iostream> #include <cstring> #include <cstdio> # ...
- 【leetcode】Word Ladder II(hard)★ 图 回头看
Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...
- POJ3034+DP
题意:给定一个N*N的矩阵, 然后在这个矩阵的每个格子在任意时间会出现一个鼹鼠,这个出现 出现鼹鼠的时间是输出信息所确定的. 现在你手里有一把锤子能够去锤这些鼹鼠. 你能 够移动锤子, ...
- jqueryrotate 使用 帮助 笔记 学习
1.想变角度 $("imgID").rotate(45); 2.想变角度时,有运动过程 $("imgID").rotate({animateTo:45} ...
- makeBackronym
makeBackronym 主要考查的是字符串的处理,大小写转换,以及字符串的Linq处理 Description: Definition- back·ro·nym noun a fanciful ...
- Eclipse搭建Struts框架,及一个简单的Struts例子
一.下载struts2.0.1 http://struts.apache.org/downloads.html,下载struts-2.0.1-all.zip,这个压缩包中包含了开发struts2所需的 ...