zoukankan      html  css  js  c++  java
  • 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 &

  • 相关阅读:
    750. 角矩形的数量(动态规划)
    Python中with标签的使用详解
    GraalVM
    spring 源码解析(二) 2.下载源码,及错误的排除。
    spring 源码解析(一) spring的架构
    词典
    java日志框架 (五)
    java日志框架 (四) 日志相关
    java日志框架 (三) 日志框架使用 之 SLF4J + Log4j2
    java日志框架 (二) 日志框架使用 之 SLF4J + logback
  • 原文地址:https://www.cnblogs.com/cuishuai/p/7815896.html
Copyright © 2011-2022 走看看