CGroup配置

在CentOS7中,使用cgroups(Control Groups)限制不同用户的CPU和内存资源,使用​​root权限​​配置集群所有节点。

1、安装cgroup工具​​

yum install -y libcgroup libcgroup-tools

安装后启动服务并设置开机自启:

systemctl start cgconfig cgred

systemctl enable cgconfig cgred

2、配置cgroup资源组​​

1-​​创建资源组配置文件​​

vi /etc/cgconfig.d/user_limits.conf(添加用户user1和user2):

group user1_limit {

cpu {

针对的是逻辑CPU,限制CPU使用率为单核的50%(周期100ms,配额50ms)

cpu.cfs_period_us = 100000;

cpu.cfs_quota_us = 50000;

}

memory {

物理内存限制1GB,总内存(含swap)限制1.5GB

memory.limit_in_bytes = 1G;

memory.memsw.limit_in_bytes = 1.5G;

}

}

group user2_limit {

cpu {

多核CPU限制调整​​,若需限制多核CPU使用率,4核的30%

cpu.cfs_period_us = 100000;

cpu.cfs_quota_us = 100000; # 100ms周期内可用100ms * 4核 * 30% = 120ms

}

memory {

memory.limit_in_bytes = 2G;

memory.memsw.limit_in_bytes = 3G;

}

}

​​参数说明​​:

cpu.cfs_period_us:CPU周期(默认100ms)。

cpu.cfs_quota_us:周期内可用CPU时间(例:50000us = 单核50%)。

memory.limit_in_bytes:物理内存上限。

memory.memsw.limit_in_bytes:物理内存+Swap上限。

2-多核CPU限制调整​​

若需限制多核CPU使用率(如4核的25%):

cpu.cfs_quota_us = 100000; # 100ms周期内可用100ms * 4核 * 25% = 100ms

cpu.cfs_period_us = 100000;

3、关联用户与资源组​​

vi /etc/cgrules.conf

添加用户映射规则:

user1 cpu,memory user1_limit/

user2 cpu,memory user2_limit/

@analog cpu,memory processlimit/%u

@digital cpu,memory processlimit/%u

@layout cpu,memory processlimit/%u

每条规则由三部分组成:

​​主体​​:@analog、@digital、@layout

以 @ 开头表示 ​​用户组​​(如 analog 组、digital 组、layout 组)。

​​子系统​​:cpu,memory

指定资源限制类型,此处表示同时限制 ​​CPU​​ 和 ​​内存​​ 资源。

​​资源组路径​​:processlimit/%u

processlimit:cgroup 的父目录名称(需在 /sys/fs/cgroup/ 下预先创建)。

%u:动态占位符,自动替换为 ​​实际用户名​​(例如用户 bob 属于 analog 组,则路径为 processlimit/bob)

​​格式​​:<用户> <子系统> <资源组路径>

重启服务生效:

systemctl restart cgconfig cgred

4、验证配置​​

​​检查资源组限制​​:

cgget -g cpu,memory:user1_limit

输出应包含配置的CPU和内存参数。

​​测试用户资源限制​​:

以user1登录,运行压力测试:

stress --cpu 4 --vm 2 --vm-bytes 500M

监控资源使用:

top # 查看CPU占用(应不超过50%)

cgstats -s # 查看cgroup资源统计

5、注意

​​1-避免资源组复用​​

同一资源组内多个用户会共享配额(如user1_limit组内两用户共争50% CPU),建议​​每用户独立资源组​​。

​​2-Swap限制依赖​​

memory.memsw.limit_in_bytes需内核启用swapaccount=1(默认启用)。

​​3-持久化与临时调整​​

持久化:通过/etc/cgconfig.d/配置。

临时调整(重启失效):

cgset -r cpu.cfs_quota_us=80000 user1_limit # 动态修改CPU配额

​​4-进程数限制补充​​

若需限制用户进程数,可在资源组中添加pids子系统:

pids {

pids.max = 100; # 最大进程数

}

实际样例:

创建仅包含 CPU 子系统的 cgroup

这会在 /sys/fs/cgroup/cpu/hive_cpu_limit/ 创建目录。

sudo cgcreate -g cpu:/hive_cpu_limit

调度周期 40 核 = 40 × 100000 = 4,000,000 微秒

sudo cgset -r cpu.cfs_period_us=100000 hive_cpu_limit

设置配额:40 核

sudo cgset -r cpu.cfs_quota_us=4000000 hive_cpu_limit

策略文件

echo 'hive cpu hive_cpu_limit' | sudo tee -a /etc/cgrules.conf

启动cgred进程

sudo systemctl start cgred

sudo systemctl enable cgred

持久Cgourp Conf

sudo tee -a /etc/cgconfig.conf <<EOF

group hive_cpu_invlimit {

cpu {

cpu.cfs_period_us = 100000;

cpu.cfs_quota_us = 2000000;

}

}

EOF

启动服务

sudo systemctl enable cgconfig

sudo systemctl start cgconfig

验证

cat /sys/fs/cgroup/cpu/hive_cpu_limit/cpu.cfs_quota_us

应输出:4000000

相关推荐
hy____1232 小时前
Linux_网络编程套接字
linux·运维·网络
若风的雨2 小时前
【deepseek】 Linux 调度延时分析
linux
小夏卷编程2 小时前
Ubuntu 20.04.4 宝塔 docker showdoc v3.2 更新到v3.7.3
运维·docker·容器
康康的AI博客2 小时前
农业工业变革:如何通过DMXAPI中转提升自动化效率
运维·人工智能·自动化
2301_803554523 小时前
linux 以及 c++编程里对于进程,线程的操作
linux·运维·c++
LuDvei3 小时前
windows 中 vs code远程连接linux
linux·运维·服务器·windows
石小千3 小时前
Ubuntu24.04安装Mysql8
运维·mysql
生活爱好者!3 小时前
NAS帮我找回童年的快乐!部署 小游戏
运维·服务器·docker·容器·娱乐
GDAL3 小时前
MANIFEST.in简介
linux·服务器·前端·python