文档章节

Cgroup的作用和基本用法

w
 walle-Liao
发布于 2016/02/26 23:29
字数 868
阅读 283
收藏 1

cgroup介绍

cgroup是control group的简称,它为Linux内核提供了一种任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。   

Cgroups是control groups的缩写,最初由Google工程师提出,后来编进linux内核。

Cgroups是实现IaaS虚拟化(kvm、lxc等),PaaS容器沙箱(Docker等)的资源管理控制部分的底层基础。

子系统是根据cgroup对任务的划分功能将任务按照一种指定的属性划分成的一个组,主要用来实现资源的控制。在cgroup中,划分成的任务组以层次结构的形式组织,多个子系统形成一个数据结构中类似多根树的结构。cgroup包含了多个孤立的子系统,每一个子系统代表单一的资源,目前,redhat默认支持10个子系统,但默认只挂载了8个子系统,ubuntu 12.04 默认支持8个子系统,但默认只挂载了5个子系统。

cgroup子系统介绍

下面对每一个子系统进行简单的介绍:

  • 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上的线程,此功能对于监测整个group非常有用,具体参见 http://lwn.net/Articles/421574/

libcgroup工具安装

yum install libcgroup

因为本机器之前已经安装了 docker,所以默认已经安装了 libcgroup

Cgroup 对应的文件系统在 /sys/fs/cgroup

cgroups资源控制

cgroups管理进程cpu资源

新建一个耗CPU的脚本

#!/bin/sh
x=0
while [ True ];do
    x=$x+1
done;

运行脚本

./testcup.sh

使用 top 命令监控,发现 testcup.sh 占用了 100% 的CPU

下面用cgroups控制这个进程的cpu资源

mkdir /sys/fs/cgroup/cpu/foo

echo 50000 > /sys/fs/cgroup/cpu/foo/cpu.cfs_quota_us #将cpu.cfs_quota_us设为50000,相对于cpu.cfs_period_us的100000是50%

echo 12559 > /sys/fs/cgroup/cpu/foo/tasks  # 12559 为上面截图中 testcup.sh 对应的 PID

再观察 top,发现 testcpu.sh CPU的占用下降到了 50% 左右


cgroups管理进程内存资源

新建一个耗内存的脚本,内存不断增长

#!/bin/sh
x="a"
while [ True ];do
    x=$x$x
done;

top 监控发现内存不断增大

下面用cgroups控制这个进程的内存资源

mkdir -p /sys/fs/cgroup/memory/foo

echo 1048576 >  /sys/fs/cgroup/memory/foo/memory.limit_in_bytes  #分配1MB的内存给这个控制组

echo 2663 > /sys/fs/cgroup/memory/foo/tasks  # 重启过任务,所以这里PID有变化了

加入控制之后再观察 top,该进程的内存占用不在增加,而是一直保持,进程进入休眠状态

参考:

http://my.oschina.net/cloudcoder/blog/424418

http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation

© 著作权归作者所有

w
粉丝 3
博文 15
码字总数 15775
作品 0
深圳
私信 提问
docker隔离与cgrep

研究cgroup的作用和基本用法: yum install libcgroup #控制cpu,内存,io示例 blkio : 这个子系统设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb等等。 cpu : 这个子系统使用调...

青春掌柜
2016/06/01
0
0
lxc基本命令lxc-checkconfig,lxc-create等命令

用于判断linux内核是否支持LXC #查看是否支持docker lxc-checkconfig [root@centos ~]# lxc-checkconfig Kernel configuration not found at /proc/config.gz; searching... Kernel configur......

Mr_sheng
2018/05/14
0
0
warden创建容器的过程

rv = unshare(CLONE_NEWNS); unshare这个调用,可以把挂载的文件系统设置成只在新的挂载命名空间(mount namespace)中可见。 execvp(argv[0], argv); execvp()会从PATH 环境变量所指的目录中...

文艺小青年
2017/06/30
0
0
Docker技术剖析:Docker背后的内核知识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaobryant/article/details/79599432 Docker本质上是运行在宿主机上的进程,它通过namespace实现了资源隔离,...

adoryn
2018/03/18
0
0
linux cgroups 简介

cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。...

sparkdev
2018/08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

jQuery使用GET方式来进行异步请求

jQuery.get( url, [data], [callback] ):使用GET方式来进行异步请求 参数: url(String) : 发送请求的URL地址. data(Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示,...

前端老手
19分钟前
4
0
网络安全市场需求

最近,网络安全技能差距的热门话题流传开来。技能差距经常被紧急讨论,可以看出它在实践中的作用是很大的。但信息安全是一门广泛的学科,所以在谈论“技能差距”时需要更具体。有专家表示,真...

linuxCool
36分钟前
3
0
定期批量改密,实现高效运维,保障口令安全

随着企业IT资产规模的不断增大,各类主机、应用系统的管理也变得愈加困难。 对于系统管理员来说,保证操作系统的密码安全是其重要工作,在需要维护众多的主机时,其面临的困境将是: 1、难以...

堡垒啊
今天
5
0
怎样在磁盘上查找MySQL表的大小?这里有答案

导读 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎。不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单! 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎...

问题终结者
今天
6
0
Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2

问题 上一篇Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置,说了一种时间方式,直接扩展注解的Value值,如: @Override@Cacheable(value = "people#${s...

xiaolyuh
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部