zoukankan      html  css  js  c++  java
  • CGROUP相关知识

    安装

    CentOS 6

    yum install libcgroup
    

    CentOS 7

    yum install libcgroup-tools
    

    使用

    默认情况下有几个控制器可以进行限制,分别是

    • cpuset
    • cpu,cpuacct
    • memory
    • devices
    • freezer
    • net_cls
    • blkio
    • perf_event
    • hugetlb

    限制CPU负载

    我写了一个脚本来消耗CPU

    count.sh

    #!/bin/bash
    N=0
    while true; do
        N=$((N+1))
        echo $N
    done
    

    执行命令

    CMD=/root/count.sh
    cgcreate -g cpu:/cpu50
    cgset -r cpu.cfs_quota_us=50000 cpu50
    cgexec -g cpu:cpu50 $CMD
    

    可见 count.sh 的CPU负载一直维持在50%以内

    [root@app-client ~]# ps aux | grep count.sh
    root     18594 48.2  0.0 106152  1032 pts/0    R+   09:53   0:11 /bin/bash /root/count.sh
    root     18666  0.0  0.0 103304   808 pts/1    S+   09:54   0:00 grep count.sh
    

    此外也可以把已经在运行的进程加入cgroup限制,不需要重启程序。

    先执行

    /root/count.sh
    

    获取进程号

    [root@app-client ~]# ps aux | grep count.sh
    root     18695 62.1  0.0 106152  1036 pts/0    R+   09:57   0:04 /bin/bash ./count.sh
    root     18697  0.0  0.0 103304   808 pts/1    S+   09:57   0:00 grep count.sh
    

    把进程加入控制器

    cgclassify -g cpu:cpu50 18695
    

    Tips:

    一个资源组可以加多个进程,资源组限制的是加入该组的进程资源总和。比如上面例子,限制50%的负载,是指所有该组的进程总共消耗50%的负载,而不是每个资源能消耗50%的负载。
    

    可以用 lscgroup 查看配置的控制器

    [root@app-client ~]# lscgroup 
    cpuset:/
    cpu:/
    cpu:/cpu50
    cpuacct:/
    memory:/
    devices:/
    freezer:/
    net_cls:/
    blkio:/
    

    可以用命令 cgdelete 进行控制器的删除。

    所有控制器格式

    请参考 https://www.kernel.org/doc/Documentation/

    比较常用的有

    • blkio.throttle.read_bps_device – 磁盘读取限速
    • blkio.throttle.write_bps_device – 磁盘写入限速
    • cpu.cfs_quota_us – CPU load限制
    • memory.limit_in_bytes – 最大内存限制
    • cpuset.cpus – 绑定CPU的core,必须和 cpuset.mems 一起使用。

    其他

    各种控制器,除了使用 cg 系列命令可以修改,也可以直接修改映射到文件系统的目录。默认情况下,CentOS 6 的路径是 /cgroup ,CentOS 7 的路径是 /sys/fs/cgroup 。

    配置文件 /etc/cgconfig.conf 或者目录 /etc/cgconfig.d/ 下可对映射的路径进行配置,有兴趣请自行打开看看。

    比如 CentOS 6 下的默认配置是

    mount {
        cpuset  = /cgroup/cpuset;
        cpu = /cgroup/cpu;
        cpuacct = /cgroup/cpuacct;
        memory  = /cgroup/memory;
        devices = /cgroup/devices;
        freezer = /cgroup/freezer;
        net_cls = /cgroup/net_cls;
        blkio   = /cgroup/blkio;
    }

    原文链接
    相关链接:
    cgroup基本介绍
    cgroup资源限制
    cgroups介绍及安装配置使用详解
    cgroup实践-资源控制
    how to use cgroup
  • 相关阅读:
    二分优化lis和STL函数
    D8 双连通分量
    Apicloud 之按两次后退键退出应用
    Js 之正则验证手机号、QQ、身份证等
    PHP 之循环创建文件夹
    招聘系统
    Mysql 之根据经纬度按距离排序
    PHP 之根据两个经纬度计算距离
    PHP 之Mysql优化
    Tkinter 之使用PAGE工具开发GUI界面
  • 原文地址:https://www.cnblogs.com/276815076/p/5601469.html
Copyright © 2011-2022 走看看