centos7使用cgroup對user進行資源限制

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章