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 &

cgroups简单使用的更多相关文章

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

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  2. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  3. Docker简单介绍

    Docker简单介绍 Docker是一个能够把开发的应用程序非常方便地部署到容器的开源引擎.由Docker公司团队编写,基于Apache 2.0开源授权协议发行.Docker的主要目的例如以下: 提供 ...

  4. Docker资源限制与Cgroups

    一.Linux control groups 简介     Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如 ...

  5. Cgroups 与 Systemd

    Cgroups 是 linux 内核提供的一种机制,如果你还不了解 cgroups,请参考前文<Linux cgroups 简介>先了解 cgroups.当 Linux 的 init 系统 ...

  6. linux cgroups 简介

    cgroups(Control Groups) 是 linux 内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合(或分隔)到按资源划分等级的不同组内,从而为系统资源管理提供一个统 ...

  7. 也谈谈我对Docker的简单理解

    Docker能解决什么问题呢?一个工具的出现必然需要解决一些问题,Docker也不例外,简单说说我们常见的2种情况Docker是如何解决的吧.1.程序在我这跑得好好的,在你那怎么就不行呢?!这是一个典 ...

  8. Linux的Namespace与Cgroups介绍

    Namespace 的概念 Linux Namespace 是kernel 的一个功能,它可以隔离一系列系统的资源,比如PID(Process ID),User ID, Network等等.一般看到这 ...

  9. Docker的简单介绍及使用

    Docker介绍 Docker是Docker.Inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源. Doc ...

随机推荐

  1. sine

       

  2. Android实现自带横线的EditText

    (一)问题 怎样实现带有横栏的EditText(像记事本的编辑界面那样)? (二)初步思路 1.通过修改EditText背景来实现(系统背景是一个框形图片,内部透明,替换为一个带有横栏的图片即可) 2 ...

  3. 设计模式--Singleton_(1)(C#版)

    今天我们来探索一下Singleton设计模式的实现及应用场景. Singleton模式属于Creational Type(创建型)设计模式的一种.该模式一般用于确保在应用中仅创建一个某类的instan ...

  4. OI动态规划&&优化 简单学习笔记

    持续更新!! DP的难点主要分为两类,一类以状态设计为难点,一类以转移的优化为难点. DP的类型 序列DP [例题]BZOJ2298 problem a 数位DP 常用来统计或者查找一个区间满足条件的 ...

  5. “全栈2019”Java多线程第十九章:死锁详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  6. PHP之旅3 php数组以及遍历数组 以及each() list() foreach()

    php的数组的定义 <?php //php中定义数组时可以通过索引直接进行赋值: $mArr[0]="哈哈"; $mArr[1]=70; $mArr[2]='haha'; e ...

  7. Manjaro Linux执行某些命令缺少libtinfo.so.5问题

    Manjaro默认有libtinfo.so.6而没有libtinfo.so.5,软件如果需要可执行以下命令安装: sudo pacman -S ncurses5-compat-libs #或 sudo ...

  8. keepalived安装配置实战心得(实现高可用保证网络服务不间断)

    keepalived安装配置实战心得(实现高可用保证网络服务不间断) 一.准备2台虚拟机     安装的系统是:centos-release-7-1.1503.el7.centos.2.8.x86_6 ...

  9. Ubuntu之tar与curl操作

    1,压缩备份: tar cfvj /tmp/test.tar.bz2  /tmp/test tar cfvz /tmp/test.tar.gz  /tmp/test tar xfvj /tmp/tes ...

  10. Scrapy框架--cookie的获取/传递/本地保存

    环境:Python3.6 + Scrapy1.4 我要实现的东西:1. 完成模拟登陆         2. 登陆成功后提取出cookie,然后保存到本地cookie.txt文件中         3. ...