安装

CentOS 6

yum install libcgroup

CentOS 7

yum install libcgroup-tools

使用

默认情况下有几个控制器可以进行限制,分别是

  • cpuset
  • cpu,cpuacct
  • memory
  • devices
  • freezer
  • net_cls
  • blkio
  • perf_event
  • hugetlb

限制CPU负载

我写了一个脚本来消耗CPU

count.sh

#!/bin/bash
N=0
while true; do
N=$((N+1))
echo $N
done

执行命令

CMD=/root/count.sh
cgcreate -g cpu:/cpu50
cgset -r cpu.cfs_quota_us=50000 cpu50
cgexec -g cpu:cpu50 $CMD

可见 count.sh 的CPU负载一直维持在50%以内

[root@app-client ~]# ps aux | grep count.sh
root 18594 48.2 0.0 106152 1032 pts/0 R+ 09:53 0:11 /bin/bash /root/count.sh
root 18666 0.0 0.0 103304 808 pts/1 S+ 09:54 0:00 grep count.sh

此外也可以把已经在运行的进程加入cgroup限制,不需要重启程序。

先执行

/root/count.sh

获取进程号

[root@app-client ~]# ps aux | grep count.sh
root 18695 62.1 0.0 106152 1036 pts/0 R+ 09:57 0:04 /bin/bash ./count.sh
root 18697 0.0 0.0 103304 808 pts/1 S+ 09:57 0:00 grep count.sh

把进程加入控制器

cgclassify -g cpu:cpu50 18695

Tips:

一个资源组可以加多个进程,资源组限制的是加入该组的进程资源总和。比如上面例子,限制50%的负载,是指所有该组的进程总共消耗50%的负载,而不是每个资源能消耗50%的负载。

可以用 lscgroup 查看配置的控制器

[root@app-client ~]# lscgroup
cpuset:/
cpu:/
cpu:/cpu50
cpuacct:/
memory:/
devices:/
freezer:/
net_cls:/
blkio:/

可以用命令 cgdelete 进行控制器的删除。

所有控制器格式

请参考 https://www.kernel.org/doc/Documentation/

比较常用的有

  • blkio.throttle.read_bps_device – 磁盘读取限速
  • blkio.throttle.write_bps_device – 磁盘写入限速
  • cpu.cfs_quota_us – CPU load限制
  • memory.limit_in_bytes – 最大内存限制
  • cpuset.cpus – 绑定CPU的core,必须和 cpuset.mems 一起使用。

其他

各种控制器,除了使用 cg 系列命令可以修改,也可以直接修改映射到文件系统的目录。默认情况下,CentOS 6 的路径是 /cgroup ,CentOS 7 的路径是 /sys/fs/cgroup 。

配置文件 /etc/cgconfig.conf 或者目录 /etc/cgconfig.d/ 下可对映射的路径进行配置,有兴趣请自行打开看看。

比如 CentOS 6 下的默认配置是

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基本介绍cgroup资源限制cgroups介绍及安装配置使用详解
cgroup实践-资源控制how to use cgroup

CGROUP相关知识的更多相关文章

  1. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  2. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  3. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  4. UIViewController相关知识

    title: UIViewController 相关知识date: 2015-12-13 11:50categories: IOS tags: UIViewController 小小程序猿我的博客:h ...

  5. 【转】java NIO 相关知识

    原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...

  6. NSString使用stringWithFormat拼接的相关知识

    NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...

  7. iOS网络相关知识总结

    iOS网络相关知识总结 1.关于请求NSURLRequest? 我们经常讲的GET/POST/PUT等请求是指我们要向服务器发出的NSMutableURLRequest的类型; 我们可以设置Reque ...

  8. 电路相关知识--读<<继电器是如何成为CPU的>>

    电路相关知识–读<<继电器是如何成为CPU的>> */--> *///--> *///--> 电路相关知识–读<<继电器是如何成为CPU的> ...

  9. 地址标记,SpringMVC转发与调用相关知识存档

    1.mytest_mavenprj1中,index的 <a href="login/login.html">点击登录</a> 与 <a href=&q ...

随机推荐

  1. @使用javap反编译Java字节码文件

    在Sun公司提供的JDK中,就已经内置了Java字节码文件反编译工具javap.exe(位于JDK安装目录的bin文件夹下). 我们可以在dos窗口中使用javap来反汇编指定的Java字节码文件.在 ...

  2. Android 使用SWIG生成Jni代码

    一,下载SWIG,并设置好环境变量 二以HelloJni为例子 导入ndk sample的HelloJni工程. 三 创建SWIG接口文件 在jni目录下新建文件Unix.i,输入SWIG代码: %m ...

  3. 创建带Mipmap的osg::Image

    我们常用osgDB::readImage或者osg::Image::allocateImage()方式创建Image对象, 跟深一步的带Mipmap的Image怎样创建呢? 偶然在分析osgParti ...

  4. hello-循环神经网络(RNN)原理

    主要的应用:机器翻译,自然语言处理,文本处理,语音识别, 图像描述生成 (Generating Image Descriptions), 图像问答QA.... 循环神经网络(RNN)原理通俗解释 1. ...

  5. [Python爬虫] 之八:Selenium +phantomjs抓取微博数据

    基本思路:在登录状态下,打开首页,利用高级搜索框输入需要查询的条件,点击搜索链接进行搜索.如果数据有多页,每页数据是20条件,读取页数 然后循环页数,对每页数据进行抓取数据. 在实践过程中发现一个问题 ...

  6. 如何在mysql数据库中保存emoji特殊字符

    MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.其实,utf8mb4是utf8的超集,理论上原来使用utf8 ...

  7. quartz.net持久化和集群【转】

    在实际使用quartz.net中.持久化能保证实例重启后job不丢失. 集群能均衡服务器压力和解决单点问题. quartz.net在这二块配置都比较方便,来看下. 一:持久化 quartz.net的持 ...

  8. Object.create(null) 和 {} 区别

    Object.create(null) 创建一个空对象,此对象无原型方法. {} 其实是new Object(),具有原型方法. 应用: 使用Object.create(null)的一个重要应用是:创 ...

  9. javascript forEach方法与jQuery each区别

    1.forEach方法 语法: array.forEach(function(currentValue, index, arr), thisValue) 参数: 示例: <!DOCTYPE ht ...

  10. Warning: cast to/from pointer from/to integer of different size

    将int变量转为(void*)时出现错误 error: cast to pointer from integer of different size [-Werror=int-to-pointer-c ...