cgroups简单使用
Cgroups控制系统资源的分配(cpu、mem、io)
1、cgroups概述
CGroup是Linux内核提供的可以限制、隔离进程组 (process groups) 所使用的物理资源 (如 cpu memory i/o 等等)。 全称是Control Groups,从2.6.24 内核引入,并不是全新创造的,而是将进程管理从 cpuset 中剥离出来。CGroups 是管理虚拟化资源手段。 CGroup 提供了一个虚拟文件系统,是进行分组管理和各子系统设置的接口。所以要使用 CGroup,必须挂载 CGroup 文件系统。通过挂载选项指定使用哪个子系统。
2、cgroup概念
任务(task):任务就是系统的一个进程;
控制群(control
group):控制群是一组按照某种标准划分的进程。Cgroup的资源控制都是以控制群为单位实现。一个进程可以加入到某个控制群,也可以迁移到另一个控制群。
层级(hierarchy):控制群可以组织成 hierarchical 的树形式。控制群树上的子节点控制群是父节点控制群的孩子,继承父控制族群的特定的属性;
子系统(subsystem):子系统是一个资源控制器,比如 cpu 子系统就是控制 cpu 时间分配的控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制群都受到这个子系统的控制。
3、安装
操作系统:3.10.0-514.el7.x86_64
#yum
-y install libcgroup
libcgroup-tools-0.41-11.el7.x86_64
启动:
#systemctl
start cgconfig
开机自启:
#systemctl
enable cgconfig
查看已经存在的子系统记挂载位置:
#lssubsys
–am
4、常用命令
cgclassify
–将运行的任务移动到一个或者多个cgroup,例如:cgclassify -g cpu:yy [pid]
cgclear
--删除层级中的所有cgroup。
cgconfigparser
--解析cgconfig.conf文件和并挂载层级。
cgcreate
-- cgcreate在层级中创建新cgroup。
cgdelete
-- cgdelete命令删除指定的cgroup。
cgexec
– 这个命令是cgroup启动的cgexec命令在指定的cgroup中运行任务。例如:cgexec -g
"blkio:foo" dd if=/dev/zero of=/dev/null &。如果不使用那就手动把进程号写入到tasks中吧。
cgget
-- cgget命令查看cgroup组里面设置的资源的限制。
cgrulesengd
--在
cgroup 中发布任务。
cgset
-- cgset 命令为
cgroup 设定参数。路径相对于根的/cgroup,如果想设置根的参数使用gset命令。
lscgroup
--命令列出层级中的 cgroup。
lssubsys
--命令列出包含指定子系统的层级,使用-am参数可以看到未挂载的所有子系统
5、cgroups限制io
限制io需要现确定两个因素:对那个pid(高io的那个进程,使用iotop –o查看,TID就是pid);
2、限制读写的disk的设备编号(例如对/dev/sda,)
#
ls –l /dev/sda
brw-rw----. 1 root disk 8, 0 11月 10 10:51 /dev/sda
8, 0 :8是主设备号,用于区分是那种类型的设备;0副设备号,用于区分同种类型设备的编号。
查看当前所有的子系统
#
lssubsys –am
cpuset
/sys/fs/cgroup/cpuset
cpu,cpuacct
/sys/fs/cgroup/cpu,cpuacct
memory
/sys/fs/cgroup/memory
devices
/sys/fs/cgroup/devices
freezer
/sys/fs/cgroup/freezer
net_cls,net_prio
/sys/fs/cgroup/net_cls,net_prio
blkio
/sys/fs/cgroup/blkio
perf_event
/sys/fs/cgroup/perf_event
hugetlb
/sys/fs/cgroup/hugetlb
pids
/sys/fs/cgroup/pids
找到bklio,及它的挂载目录。
创建新的group,进行io限制
可以提前使用一个命令先占用系统io,仅限于测试:
#
dd if=/dev/sda of=/dev/null &
使用iotop –o 查看当前的DISK READ的值:
可以看到是600多,
#mkdir
/sys/fs/cgroup/blkio/spark
#cd
/sys/fs/cgroup/blkio/spark
#echo
'8:0 10485760' > blkio.throttle.read_bps_device
#echo '8:0 10485760' > blkio.throttle.write_bps_device
暂时设置这几个值就够用了,10485760是字节数,即表示的是10M左右,根据自己的情况设置这个值。
最后将pid写入到spark目录下的tasks文件:
#
echo 2735 > tasks
启动服务:
#systemctl
start cgconfig
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID
PRIO USER DISK READ
DISK WRITE SWAPIN IO>
COMMAND
2735 be/4 root 11.67M/s 0.00
B/s 0.00% 97.70%
dd if=/dev/sda of=/dev/null &
cgroups简单使用的更多相关文章
- 理解Docker(4):Docker 容器使用 cgroups 限制资源使用
本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
目录 [TOC] 1.环境准备 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...
- Docker简单介绍
Docker简单介绍 Docker是一个能够把开发的应用程序非常方便地部署到容器的开源引擎.由Docker公司团队编写,基于Apache 2.0开源授权协议发行.Docker的主要目的例如以下: 提供 ...
- Docker资源限制与Cgroups
一.Linux control groups 简介 Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如 ...
- Cgroups 与 Systemd
Cgroups 是 linux 内核提供的一种机制,如果你还不了解 cgroups,请参考前文<Linux cgroups 简介>先了解 cgroups.当 Linux 的 init 系统 ...
- linux cgroups 简介
cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统 ...
- 也谈谈我对Docker的简单理解
Docker能解决什么问题呢?一个工具的出现必然需要解决一些问题,Docker也不例外,简单说说我们常见的2种情况Docker是如何解决的吧.1.程序在我这跑得好好的,在你那怎么就不行呢?!这是一个典 ...
- Linux的Namespace与Cgroups介绍
Namespace 的概念 Linux Namespace 是kernel 的一个功能,它可以隔离一系列系统的资源,比如PID(Process ID),User ID, Network等等.一般看到这 ...
- Docker的简单介绍及使用
Docker介绍 Docker是Docker.Inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源. Doc ...
随机推荐
- struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp) Xml代码 : <result name="success">/main.jsp</re ...
- Java实现WordCount
GitHub项目地址:https://github.com/happyOwen/SoftwareEngineering wordcount项目要求: 程序处理用户需求的模式为:wc.exe [para ...
- [FMX]在 FMX 程序中绘制单像素宽度的直线 [FMX]在 FMX 程序中绘制单像素宽度的直线
[FMX]在 FMX 程序中绘制单像素宽度的直线 2017-10-09 • Android.Delphi.教程 • 暂无评论 • swish •浏览 353 次 在前面的一篇文章中,我介绍了一种绘制低 ...
- wpf(使用定时器)使用定时器操作UI界面
在项目实践中,我们 可能会遇到需要将一些控件上显示的内容只显示一段时间过后清空. 下面我们来实现这种操作: 首先需要注意的是:在wpf中涉及到界面操作的话,一定要使用定时器DispatcherTime ...
- .netcore与vue的学习笔记001
1.dnc的js引用 需要引用的js文件要放在解决方案下的wwwroot目录下.否则将无法获取到指定js文件,出现404错误 2.vue的相关运用 0)通过new Vue并传入object来实例化一个 ...
- NetCore偶尔有用篇:NetCore项目WebApi返回Json属性大小写
一.概述 1.前面文章介绍Controller的大小写问题时,目的只是介绍它的差异性,有同学回复了,这里把它作为一个点写一下吧. 二.默认定义的转换结果 1.写一个返回对象的方法. 2.运行查看结果. ...
- 基于STM32的平衡车机器人设计-硬件电路设计
今天分享一个STM32F103为主控的自平衡车机器人的硬件电路设计.(亲测完全可用,且没有任何问题) 电路原理图: 电源部分采用12V锂电池作为输入,分三路稳压,其中7805作为5V传感器的供电以及后 ...
- max渲染通道元素的范例
renderElementManager = MaxOps.GetCurRenderElementMgr() renderElementManager.Removeallrenderelements( ...
- AJPFX的资金安全性
AJPFX承诺保证客户资金安全,并严格按照英国的相关规章制度从事经营活动.客户资金存放于投资级银行的独立账户中.通过实行公司资产与客户资金分别保管,在发生无偿债能力的罕见情况下,客户可获退还独立存放资 ...
- JQuery Mobile - 解决切换页面时,闪屏,白屏等问题
在点击链接,切换页面时候,总是闪屏,感觉很别扭,看起来不舒服,怎么解决这个问题?方法很简单,就是在每个页面的meta标签内定义user-scalable的属性为 no! <meta name=& ...