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

相关推荐
JZC_xiaozhong1 天前
数据不互通、审批慢?企业多系统智能协同与流程自动化解决方案
运维·自动化·流程管理·流程自动化·数据集成与应用集成·流程监控·流程可视化设计
爱学习的小囧1 天前
ESXi 8.0 原生支持 NVMe 固态硬盘吗?VMD 配置详解教程
linux·运维·服务器·esxi·esxi8.0
坚持就完事了1 天前
Linux中的变量
linux·运维·服务器
hERS EOUS1 天前
nginx 代理 redis
运维·redis·nginx
handler011 天前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
Cat_Rocky1 天前
利用Packet Tracer网络实验
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志1 天前
Linux 驱动实战:SR501 人体红外传感器驱动开发与调试全记录
linux·运维·驱动开发
正点原子1 天前
【正点原子Linux连载】第三章 U-Boot使用 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南
linux·运维·驱动开发
Qbw20041 天前
【Linux】进程地址空间
linux·c++
忍冬行者1 天前
MongoDB 三节点副本集离线部署运维手册
运维·数据库·mongodb