cgroup-资源隔离
来源:互联网 发布:js 字符串对象转数组 编辑:程序博客网 时间:2024/05/16 11:24
转载来自:http://blog.csdn.net/micklf/article/details/60868649
安装(基于centos7)
安装
- 1
- 2
- 1
- 2
numactl是用来看cpu的numa内存的
启动
- 1
- 2
- 1
- 2
启动后的默认挂载位置:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如果想要修改,需要umount掉,之后在/etc/cgconfig.conf
里修改
基础操作
systemctl enable cgconfig.service
配置cgroup开机启动
服务器开机后,会将cgroup挂载到/sys/fs/cgroup
下,但是用echo 3 > /xxx/tasks
这种方式一直报错,所以建议切换到自己的目录,网上资料常见的是推荐到/cgroup
下
服务器开机后,执行cgclear
会清除掉默认的所有挂载
修改/etc/cgconfig.conf
,加入如下内容
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
执行cgconfigparser -l /etc/cgconfig.conf
可以让cgroup安装配置文件内的目录进行挂载,而之后也能使用echo 3 > /xxx/tasks
ps:重启服务器,会发现还是默认挂载到/sys/fs/cgroup
,所以上述操作最好写到开机启动里面
建议多使用cgset
和cgget
,而不要偷懒使用echo
那种更改配置的方式,因为有的时候会报错无法执行成功。譬如cpuset.cpus和cpuset.mems
基础命令
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
示例
限制某进程CPU使用率
创建控制群组
cgcreate -g cpu:/g1
这个命令会创建/sys/fs/cgroup/cpu/g1
目录出来,在这个目录下有各种cgroup cpu的配置文件
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
设置CPU限制参数
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
将进程加入控制群组
启动进程,通过top可以看到cpu占用100%,同时拿到进程pid:13642
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
将此进程加入控制群组g1:
- 1
- 2
- 3
- 1
- 2
- 3
通过top看,cpu消耗变成了50%
功能
假定已经按照如下方式进行了cgroup挂载
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
检查CPU的内存节点数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
CPU使用核数
创建控制群组g1
- 1
- 1
默认的cpuset.cpus和cpuset.mems是空的
设定只用cpu0,需要同时设定这2个值,其中mems的值参考numa的node数字,上面通过numactl --hardware
查到是0
- 1
- 2
- 1
- 2
设定后获取结果
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
执行/tmp/highcpu.sh
,进程号是3331,执行mpstat -P ALL 1 1
可以看到当前在cpu17上运行
执行cgclassify -g cpuset:g1 3331
,将highcpu.sh进程加入g1的控制,执行mpstat -P ALL 1 1
可以看到切换到了cpu0运行
修改cpu,cgset -r cpuset.cpus=31 g1
,之后highcpu.sh就切换到了cpu31执行,这里cpu.mems一直设定的是0,因为numa只有node 0
内存使用量
创建控制群组g1
- 1
- 1
查看默认内存是没有限制的
- 1
- 1
限制内存只有1GB
- 1
- 1
执行/tmp/highmemory.sh
,进程号是21127
执行cgclassify -g memory:g1 21127
,将highmemory.sh进程加入g1的控制,执行top
以看到内存一直在涨,到1G的时候,进程就被kill掉了
限制目录
这个和cgroup就没有关系了
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
上面依次做了创建一个镜像文件,20M,然后将镜像文件挂载成一个设备/dev/loop0,格式化成xfs文件系统后,挂载到/home/test/dir目录上
通过如下命令可以看到目录容量,向这个目录拷贝文件会发现超过17M就拷贝不进去了
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
磁盘读取速度限制
要控制/dev/sdb的磁盘,通过下述命令查到磁盘驱动号8,16
- 1
- 2
- 1
- 2
创建控制组,设定8,16磁盘有1MB的读取限制
- 1
- 2
- 1
- 2
启动读取测试命令,拿到pid 14468
- 1
- 1
通过下面命令可以看到对磁盘读写速度的消耗
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
将进程加入g1控制组后,读取速度被限制
- 1
- 1
问题
无法启动
最开始只安装libcgroup.x86_64
,会无法启动:
- 1
- 2
- 3
- 1
- 2
- 3
是因为没有安装libcgroup-tools.x86_64
其他知识
获取CPU线程数
- 1
- 2
- 1
- 2
获取CPU NUMA内存节点信息
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 1
- 2
- 3
测试脚本
highcpu.sh
/tmp/highcpu.sh
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
highmem.sh
/tmp/highmem.sh
- 资源隔离-cgroup
- cgroup-资源隔离
- Cgroup - Linux 的 IO 资源隔离
- jstorm的cgroup资源隔离机制
- yarn使用cgroup隔离cpu资源
- torque+openmpi+cgroup实现任务间资源隔离
- NodeManager启用cgroup资源隔离(Hadoop2.3)
- Cgroup的CPU资源隔离介绍&docker cpu限制
- cgroup资源隔离内存OOM事件监听(oom notifier)
- cgroup 管理cpu资源
- vm的cpu通过cgroup来隔离
- cgroup---资源控制的实现
- Linux cgroup控制进程资源
- docker cgroup 资源监控 术语解析
- Cgroup
- Cgroup
- cgroup
- cgroup
- 疯狂Java笔记之常见java集合的实现细节
- Java多线程(三)之ConcurrentHashMap深入分析
- 设计模式——设计模式概览及六大设计原则
- 基于元胞自动机的城市规划
- MySQL常用命令
- cgroup-资源隔离
- 分享内容拉起客户端查看 Universal Links
- nodeJS中大文件读写操作--Stream流
- OData
- Glide加载gif及拓展
- 数据结构入门7—左偏树
- 缺少Microsoft Communications Control 控件
- Java回调机制
- WordPress 后台出现No input file specified解决方案