cgroups简单使用

Cgroups控制系统资源的分配(cpumemio

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 &

时间: 2024-10-10 23:12:26

cgroups简单使用的相关文章

[转载] Docker背后的内核知识——cgroups资源限制

原文: http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation 上一篇中,我们了解了Docker背后使用的资源隔离技术namespace,通过系统调用构建一个相对隔离的shell环境,也可以称之为一个简单的“容器”.本文我们则要开始讲解另一个强大的内核工具——cgroups.他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重.计算使用量.操控进程启停等等.在介绍完基

[转载] Linux资源管理之cgroups简介

原文: http://tech.meituan.com/cgroups.html 引子 cgroups 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级容器 Docker 就使用了 cgroups 提供的资源限制能力来完成cpu,内存等部分的资源控制. 另外,开发者也可以使用 cgroups 提供的精细化控制能力,限制某一个或者某一组进程的资源使用.比如在一个既部署了前端 web 服务,也部署了后端计算模块的

Docker背后的内核知识——cgroups资源限制(转)

时间 2015-04-20 21:10:00 InfoQ 原文  http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation 主题 Cgroups Docker 上一篇中,我们了解了Docker背后使用的资源隔离技术namespace,通过系统调用构建一个相对隔离的shell环境,也可以称之为一个 简单的“容器”.本文我们则要开始讲解另一个强大的内核工具——cgroups.他不仅可以限制被

理解Docker(4):Docker 容器使用 cgroups 限制资源使用

上一篇文章将到 Docker 容器使用 linux namespace 来隔离其运行环境,使得容器中的进程看起来就像爱一个独立环境中运行一样.但是,光有运行环境隔离还不够,因为这些进程还是可以不受限制地使用系统资源,比如网络.磁盘.CPU以及内存 等.为了让容器中的进程更加可控,Docker 使用 Linux cgroups 来限制容器中的进程允许使用的系统资源. 1. 基础知识:Linux control groups 1.1 概念 Linux Cgroup 可???让???您???为???系

使用 nice、cpulimit 和 cgroups 限制 cpu 占用率

Linux内核是一名了不起的马戏表演者,它在进程和系统资源间小心地玩着杂耍,并保持系统的能够正常运转. 同时,内核也很公正:它将资源公平地分配给各个进程. 但是,如果你需要给一个重要进程提高优先级时,该怎么做呢? 或者是,如何降低一个进程的优先级? 又或者,如何限制一组进程所使用的资源呢? 答案是需要由用户来为内核指定进程的优先级 大部分进程启动时的优先级是相同的,因此Linux内核会公平地进行调度. 如果想让一个CPU密集型的进程运行在较低优先级,那么你就得事先配置好调度器. 下面介绍3种控制

cgroups 命令集

cgroups 命令集 最后介绍,功能最为强大的控制组(cgroups)的用法.cgroups 是 Linux 内核提供的一种机制,利用它可以指定一组进程的资源分配. 具体来说,使用 cgroups,用户能够限定一组进程的 cpu 占用率.系统内存消耗.网络带宽,以及这几种资源的组合. 对比nice和cpulimit,cgroups 的优势在于它可以控制一组进程,不像前者仅能控制单进程.同时,nice 和 cpulimit 只能限制 cpu 使用率,而 cgroups 则可以限制其他进程资源的使

云计算、大数据和人工智能简单概述

今天跟大家讲讲云计算.大数据和人工智能.为什么讲这三个东西呢?因为这三个东西现在非常火,并且它们之间好像互相有关系:一般谈云计算的时候会提到大数据.谈人工智能的时候会提大数据.谈人工智能的时候会提云计算--感觉三者之间相辅相成又不可分割.但如果是非技术的人员,就可能比较难理解这三者之间的相互关系,所以有必要解释一下. 一.云计算最初的目标 我们首先来说云计算.云计算最初的目标是对资源的管理,管理的主要是计算资源.网络资源.存储资源三个方面. 管数据中心就像配电脑 什么叫计算.网络.存储资源? 比

Docker基础 Linux内核之Cgroups(2)

作为开源Container技术代表的Docker,它跟Linux内核的Namespace和Cgroup两大特性密不可分.物有本末,事有终始.知所先后,则近道矣.理解Linux的这两大特性将有助于我们更深入的理解Docker. 在本文中我们将会简要介绍一下如何在CentOS上利用Cgroups限制CPU的使用率. Cgroups的历史 Cgroups是Control Groups的缩写, 它是Linux 内核的一个特征,在2.6.24被引入. Cgroups用于提供对Linux的进程组进行资源上的

Docker 架构原理及简单使用

提示:文中有些内容为大神的博客内容,就不统一标注那里引用,只是再最下面标注参考连接谢谢 一.简介 1.了解docker的前生LXC LXC为Linux Container的简写.可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性.相当于C++中的NameSpace.容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求. 与传统虚拟化技术相比,它的优势在于: (1)与宿主机使用同一个内核,性能损耗小: (2