为什么要有cgroup

Linux系统中经常有个需求就是希望能限制某个或者某些进程的分配资源。也就是能完成一组容器的概念,在这个容器中,有分配好的特定比例的cpu时间,IO时间,可用内存大小等。于是就出现了cgroup的概念,cgroup就是controller group,最初由google的工程师提出,后来被整合进Linux内核中。

Cgroup是将任意进程进行分组化管理的Linux内核功能。cgroup本身提供将进程进行分组化管理的功能和接口的基础结构。

而后的Android操作系统也就凭借着这个技术,为每个应用程序分配不同的cgroup,将每个程序进行隔离,达到了一个应用程序不会影响其他应用程序环境的目的。

概念

task:

一个进程

control group:

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

hierarchy:

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

subsystem:

子系统。

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

可以使用lssubsys -al来列出系统支持多少种子系统,和使用ls /sys/fs/cgroup/ (ubuntu)来显示已经挂载的子系统:

可以看到这里的几个子系统,比如cpu是控制cpu时间片的,memory是控制内存使用的。

如何安装cgroup

安装cgroup:

apt-get install cgroup-bin

如何为cgroup分配限制的资源

首先明白下,是先挂载子系统,然后才有control group的。意思就是比如想限制某些进程的资源,那么,我会先挂载memory子系统,然后在memory子系统中创建一个cgroup节点,在这个节点中,将需要控制的进程id写入,并且将控制的属性写入。

拿memory子系统为例:

通过查看cgroup的配置文件:

cat /etc/cgconfig.conf

看到memory子系统是挂载在目录/sys/fs/cgroup/memory

进入这个目录

创建一个文件夹,就创建了一个control group

mkdir test

发现test目录下自动创建了许多文件:

这些文件的含义如下:

于是,限制内存使用我们就可以设置memory.limit_in_bytes

将一个进程加入到这个test中

echo $$ > tasks

这样就将当前这个终端进程加入到了内存限制的cgroup中了。

将这个cgroup删除只要删除目录就行了

rmdir test

参考文章

http://www.cnblogs.com/lisperl/archive/2012/04/17/2453838.html

http://www.cnblogs.com/lisperl/archive/2012/04/15/2450183.html

http://www.cnblogs.com/lisperl/archive/2012/04/18/2455027.html

http://blog.chinaunix.net/uid-20940095-id-3294134.html

最新文章

  1. iOS Interface Builder:在.xib文件中加载另一个.xib文件
  2. #一周五# (视频) 手掌四轴Estes 4606,树莓派2和WRTNode,WinHEC 2015深圳
  3. c# 字符串前加@
  4. 3D音效
  5. Remainder
  6. Transact-SQL 学习小结
  7. Android:Activity的跳转
  8. How Tomcat Works(十六)
  9. sqlmap文件在tomcat7中运行报错原因及<![CDATA[ ]]>
  10. JSP的优势与劣势浅析
  11. Jzzhu and Cities
  12. PM意识升级2.0
  13. PHP设计模式概述
  14. 题解:YNOI/GZOI2019 与或和
  15. Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取
  16. PAT L3-020 至多删三个字符
  17. jquery 获取$("#id").text()里面的值 需要进行去空格去换行符操作
  18. 断路器Ribbon
  19. Qt编写自定义控件插件开放动态库dll使用(永久免费)
  20. Geoserver 发布shp格式地图服务

热门文章

  1. Android -- 面试 -- 数据库升级策略
  2. Luogu 1315 【NOIP2011】观光公交 (贪心)
  3. swap(十六)
  4. Nginx配置项优化详解【转】
  5. merge函数:R语言,根据相同的列或ID合并不同的文件
  6. 2156: 中南大学2018年ACM暑期集训前期训练题集(入门题) D: 机器人的指令
  7. Swing的特性
  8. H3C配置FTP服务器
  9. Python基础数据类型-字符串(string)
  10. javascript 模拟日历