安装

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. EF DBContext中DbSet中Hashset添加对象后,DataGrid UI没有刷新的问题

    使用EF4/5添加数据库视图生成DBContext,如果数据表/对象之间有M-N对应关系,EF对自动添加引用类集合,是Hashset类型.由于不是ObservableCellection类型,在引用类 ...

  2. Hydra 无法爆破SSH 解决办法

    今天测试ssh爆破,发现使用hydra有些问题,windows版本没有协议支持其他的貌似都可以,kali本身也有hydra环境但是也会出现问题,所以就搜了一些资料贴在这里,当然这也是我测试过的,重新编 ...

  3. Orchard运用 - 网站样例

    在此分享一些个人觉得比较不错的基于Orhcard搭建的网站. 中文版: http://www.58img.com/ http://www.weijiqiong.com/ http://www.apma ...

  4. django 基础知识回顾

    内容回顾: 1. ajax参数 url: type: data: 1.value不能是字典 {k1:'v1',k2:[1,2,3,],k3; JSON.string} 2.$('').serilize ...

  5. 【Python】《大话设计模式》Python版代码实现

    <大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...

  6. scala for循环

    scala for循环功能强大啊,for条件可以写各种表达式 通过一个demo来看一下,这个是一个讲yield关键字的demo:<Scala中的yield> object YieldDem ...

  7. java开发struts2项目遇到FilterDispatcher过时

    由于工作需要,再次需要写一些简单的Java代码了,曾经的Java编程历历在目,但是却再也找不到以前的感觉了.于是便怀着对儿时Java的记忆,再次踏上Java Web Project. 在此特别鸣谢:h ...

  8. Android 自己主动化測试(3)&lt;monkeyrunner&gt; 依据ID查找对象&amp;touch&amp;type (python)

    我在之前的两篇文章中用java来实现过 Android 自己主动化測试(1)怎样安装和卸载一个应用(java).Android 自己主动化測试(2)依据ID查找对象(java). 可是本质上都是用mo ...

  9. Swift学习笔记 - 字符串

    1. 不可变字符串 Objective-C: NSString *string1 = @"Hello World!"; Swift: let string1 = "Hel ...

  10. select使用实例——str_cli函数(修订版)

    我们可以使用select函数重写http://www.cnblogs.com/nufangrensheng/p/3587962.html中的str_cli函数,这样服务器进程一终止,客户就能马上得到通 ...