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

相关推荐
KOYUELEC光与电子努力加油3 小时前
JAE日本航空电子推出满足汽车市场小型防水最新需求的MX80系列连接器
服务器·科技·单片机·汽车
123过去3 小时前
hashid使用教程
linux·网络·测试工具·安全
C+++Python3 小时前
Linux/C++多进程
linux·运维·c++
最贪吃的虎3 小时前
GitHub推送又超时了?试试SSH
运维·ssh·github
XZY0283 小时前
如何使用grpc
运维·服务器
rleS IONS4 小时前
SQL2000在win10上安装的方法
运维·服务器
Stack Overflow?Tan904 小时前
linux ubuntu22.04安装ROS2humble完整版的流程
linux·docker·ros2
zly35004 小时前
centos7 sshd无法启动
linux·运维·服务器
IMPYLH5 小时前
Linux 的 hostid 命令
linux·运维·服务器·bash
山峰哥5 小时前
告别“点点点”:AI 如何重构我们的测试体系与质量防线
服务器·汇编·数据库·人工智能·性能优化·重构