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

相关推荐
AlfredZhao1 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
戴为沐3 天前
Linux内存扩容指南
linux
zylyehuo3 天前
Linux 彻底且安全地删除文件
linux
用户805533698034 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297914 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Web3探索者5 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo5 天前
Linux系统中网线与USB网络共享冲突
linux
荣--5 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森5 天前
动手实战学 Docker — 从零到集群编排完全指南
运维