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