首页 > 系统相关 >centos7使用cgroup对user进行资源限制

centos7使用cgroup对user进行资源限制

时间:2022-11-25 10:23:54浏览次数:66  
标签:113280 centos7 分配内存 user cgroup memory root cpu bash

1.概述

本篇介绍在centos7.9(4核1G虚拟机)上使用cgroup对user的资源(cpu,memory)进行限制,达到对普通用户的资源利用限制跟root资源限制生效且效果不同。

适用于多用户登陆节点上对用户限制,避免造成服务节点负载过高,性能下降,节点宕机等问题。

参考教程:https://zhuanlan.zhihu.com/p/528234268

2.部署过程

工具依赖安装

安装依赖:yum -y install libcgroup libcgroup-tools

配置文件处理
配置cgconfig.conf,内容如下:

template users/%u {
    memory {
        memory.limit_in_bytes = 200M;
        memory.memsw.limit_in_bytes = 0M;
    }   
    cpu {
        cpu.cfs_quota_us = 200000;
        cpu.cfs_period_us = 100000;
    }   
}
group  root {
    memory {
        memory.limit_in_bytes = 500M;
    }   
    cpu {
        cpu.cfs_quota_us = 400000;
        cpu.cfs_period_us = 100000;
    }   
}

配置/etc/cgrules.conf,内容如下:

root    cpu,memory              root
*       cpu,memory              users/%u

服务启动

systemctl start cgconfig
systemctl start cgred

当服务启动以后,在/sys/fs/cgroup/cpu//sys/fs/cgroup/memory/目录下,会出现以 root命名和users命名的目录。

root目录下,即是对root用户的资源限制,users目录下是登陆到此节点上普通用户的资源限制。

删除限制

有时候对配置文件/etc/cgconfig.conf和/etc/cgrules.conf修改后,需要重启服务,并先删除之前的配置

systemctl restart cgconfig && systemctl restart cgred

cgdelete -g cpu:/root
cgdelete -g memory:/root
cgdelete -g cpu:/users/xxx
cgdelete -g memory:/users/xxx

3.测试

cpu测试脚本cpu.sh

#!/bin/bash
while_test()
{
    while ((1));
    do
        i=2;
    done
}

run_cpu()
{
    for ((i=0; i<$1; i++));
    do
        while_test &
    done
}

if [ "$#" -ne 1 ]
then
    echo "$0 num"
else
    run_cpu $1
fi

内存测试程序oom.c

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>

#define MEGABYTE 1024*1024

int main(int argc, char *argv[]){
        void *myblock = NULL;
        int count = 0;
        float seconds = 0.5;
        while(1)
        {
                myblock = (void *) malloc(MEGABYTE);
                if ( !myblock ) break;
                memset(myblock,1,MEGABYTE);
                sleep(seconds);
                printf("已经分配内存%dMb\n", ++count);
        }
        return 0;
}

gcc -o oom oom.c

root用户的cpu利用测试

执行:bash cpu.sh 4,然后top发现4核心均以用上

10252 root      20   0  113280    392    192 R 100.0  0.0   0:03.98 bash                                                                     
10249 root      20   0  113280    392    192 R  99.7  0.0   0:03.97 bash
10250 root      20   0  113280    392    192 R  99.7  0.0   0:03.97 bash
10251 root      20   0  113280    388    188 R  99.7  0.0   0:03.95 bash 

root用户的内存使用测试

执行:./oom,达到限制阈值后被杀掉

已经分配内存491Mb
已经分配内存492Mb
已经分配内存493Mb
已经分配内存494Mb
已经分配内存495Mb
已经分配内存496Mb
已杀死

普通用户的cpu测试

执行:bash cpu.sh 4,然后top发现只能使用2核心

10608 liwl      20   0  113280    380    188 R  33.3  0.0   0:00.67 bash 
10610 liwl      20   0  113280    384    192 R  33.3  0.0   0:00.66 bash
10611 liwl      20   0  113280    384    192 R  33.3  0.0   0:00.65 bash 
10609 liwl      20   0  113280    384    192 R  27.8  0.0   0:00.67 bash

普通用户的内存测试

执行:./oom后,达到限制阈值被杀掉

已经分配内存188Mb
已经分配内存189Mb
已经分配内存190Mb
已经分配内存191Mb
已经分配内存192Mb
已经分配内存193Mb
已经分配内存194Mb
已经分配内存195Mb
已经分配内存196Mb
已经分配内存197Mb
已经分配内存198Mb
Killed

标签:113280,centos7,分配内存,user,cgroup,memory,root,cpu,bash
From: https://www.cnblogs.com/liwanliangblog/p/16924297.html

相关文章

  • CentOS7.9 MySQL5.1 安装
    1.下载相关mysql源码包wgethttps://downloads.mysql.com/archives/get/p/23/file/mysql-5.1.63-linux-x86_64-glibc23.tar.gz2.安装相关依赖包yuminstallbisongcc......
  • centos7部署heartbeat3.0
    1.概述本篇介绍在centos7.9上快速部署heartbeat3.0.6,以便在后续学习工作中使用heartbeat作为高可用软件实施其他服务的高可用部署。centos7.9源码编译按转heartbeat,大致......
  • Python3基于Centos7的安装
    0x00环境Centos7.9,默认已安装python2.7.50x01依赖软件yuminstallwgetzlib-develbzip2-developenssl-develncurses-develreadline-develtk-develgccmakezl......
  • centos7简单登录redis
    登录数据库:redis_cli-h[host]-p[port]输入用户名、密码登录auth[username]password选择数据库selectindex12.1对key操作的命令keys*:查询所有的ke......
  • Linux CentOS7.X-命令记录
    1、链接命令ln硬链接:相当于复制。ln源文件(路径 )   目标文件(路径)硬链接文件,只要修改了其中一个文件,另外一个文件也会同步修改,但是删除操作不......
  • Centos7.6升级到Centos7.9并升级内核
    较新版本的Kubernetes部署要求Centos7.5以上版本,否则会出现kubelet无法启动、harbor端口访问异常等问题,同时要求内核版本要升级到4.4.x以上。一.升级系统版本1)查看当前ce......
  • centos7虚拟机 配置本地源软件仓库
    CentOS7配置本地yum源软件仓库先连接虚拟光驱,对应的光驱iso文件没有的去下载对应镜像Download(centos.org)https://www.centos.org/download/进入虚拟机,把......
  • CentOS7.8部署Docker
    1.通过CentOS安装Docker1.1查看操作系统平台[root@k8s~]#cat/etc/redhat-releaseCentOSLinuxrelease7.8.2003(Core)[root@k8s~]#uname-r3.10.0-1127.el7.x86_64......
  • SAP-SD-ABAP-VMOD 查找和应用SD模块用户出口(user exit) 好方法
    针对SD模块,有一个专门管理user-exit的开发包 VMOD,只要用tcode:se80查看它,会发现绝大部分的SD要相关的user-exit都能在这找到。......
  • VMware系列---【手把手初始化安装一台centos7纯净系统】
    手把手初始化安装一台centos7纯净系统1.下载centos7镜像参考链接:https://www.cnblogs.com/hujunwei/p/15527013.html这里为了节省磁盘空间,我选择纯净版mini2.打开vmwar......