首页 > 运维 > linux运维 > 正文

如何在Linux中设置资源池 Linux cgroups用户限制

P粉602998670
发布: 2025-09-14 13:36:02
原创
1012人浏览过
答案:通过cgroups机制为Linux用户devuser创建资源池,需先确认cgroup挂载,再创建cpu、memory控制组,设置CPU配额50%和内存限制2GB,最后通过systemd slice或手动方式将用户进程纳入控制组实现资源隔离与限制。

如何在linux中设置资源池 linux cgroups用户限制

在Linux中设置资源池并对用户进行资源限制,核心是通过Linux内核的Control Groups(cgroups)机制。这就像是给系统中的不同用户或进程分配独立的“资源预算”,确保一个用户或应用不会因为过度消耗CPU、内存或I/O等资源,而影响到整个系统的稳定性和其他用户的体验。简单来说,就是把资源“圈地”分配,避免“大锅饭”带来的性能波动。

解决方案

要在Linux中通过cgroups为用户设置资源限制,这并非简单地敲几行命令就能完成,更重要的是理解其背后的原理和层级关系。我个人觉得,理解这些比记住具体命令更重要。

首先,你需要确认你的Linux内核是否支持cgroups,并检查cgroup文件系统是否已经挂载。现代Linux发行版通常都默认开启并自动挂载了,你可以通过

mount | grep cgroup
登录后复制
来查看。如果未挂载,你需要手动创建目录并挂载,例如:

# 检查cgroup文件系统挂载情况
mount | grep cgroup

# 如果需要,手动挂载(通常由系统自动完成)
# sudo mkdir -p /sys/fs/cgroup/cpu,memory,blkio
# sudo mount -t cgroup -o cpu,memory,blkio none /sys/fs/cgroup/cpu,memory,blkio
登录后复制

这里我选择将

cpu
登录后复制
memory
登录后复制
blkio
登录后复制
(块设备I/O)这三个常用的子系统挂载到同一个层级,这在对用户进行综合资源限制时非常方便。

接下来,我们需要创建具体的控制组(cgroup)。假设我们想为用户

devuser
登录后复制
创建一个独立的资源池,限制其CPU和内存使用。我们会在每个子系统对应的层级下创建这个组:

# 为devuser在CPU子系统下创建控制组
sudo mkdir /sys/fs/cgroup/cpu/devuser_group

# 为devuser在Memory子系统下创建控制组
sudo mkdir /sys/fs/cgroup/memory/devuser_group
登录后复制

你会发现,对于每个你想要限制的资源类型(子系统),都需要创建对应的目录。这就像在不同的资源维度上,为

devuser
登录后复制
画出了一个专属的区域。

现在,我们可以设定具体的资源限制了。以CPU为例,我们使用

cpu.cfs_period_us
登录后复制
cpu.cfs_quota_us
登录后复制
来限制CPU带宽。
cfs_period_us
登录后复制
定义了一个调度周期(以微秒为单位),而
cfs_quota_us
登录后复制
则是在这个周期内,该cgroup被允许使用的CPU时间。比如,要限制
devuser_group
登录后复制
只能使用一个CPU核心的50%:

搜狐资讯
搜狐资讯

AI资讯助手,追踪所有你关心的信息

搜狐资讯 24
查看详情 搜狐资讯
# 设置CPU周期为100毫秒 (100000微秒)
sudo sh -c "echo 100000 > /sys/fs/cgroup/cpu/devuser_group/cpu.cfs_period_us"
# 设置CPU配额为50毫秒 (50000微秒),即50%的CPU利用率
sudo sh -c "echo 50000 > /sys/fs/cgroup/cpu/devuser_group/cpu.cfs_quota_us"
登录后复制

内存限制则通过

memory.limit_in_bytes
登录后复制
文件来设定。例如,限制
devuser_group
登录后复制
最多使用2GB内存:

# 限制内存使用为2GB
sudo sh -c "echo 2G > /sys/fs/cgroup/memory/devuser_group/memory.limit_in_bytes"
# 你还可以设置软限制,当系统内存紧张时,会优先回收这部分内存
# sudo sh -c "echo 1.5G > /sys/fs/cgroup/memory/devuser_group/memory.soft_limit_in_bytes"
登录后复制

最后,也是最关键的一步,是将

devuser
登录后复制
的进程加入到这些控制组中。最直接的方法是找到
devuser
登录后复制
的进程ID(PID),然后将PID写入相应cgroup的
tasks
登录后复制
文件。

# 查找devuser的进程ID
# ps -u devuser -o pid=

# 将PID写入CPU控制组的tasks文件
# sudo sh -c "echo <PID> > /sys/fs/cgroup/cpu/devuser_group/tasks"
# 将PID写入内存控制组的tasks文件
# sudo sh -c "echo <PID> > /sys/fs/fs/cgroup/memory/devuser_group/tasks"
登录后复制

但这种手动方式显然不适合管理用户会话。更实际和推荐的方法是利用

systemd
登录后复制
的集成能力,或者使用
cgexec
登录后复制
命令。

对于

systemd
登录后复制
,我们可以创建一个
slice
登录后复制
单元文件来定义用户的资源限制。例如,创建一个
/etc/systemd/system/user-devuser.slice
登录后复制
文件:

[Unit]
Description=Resource slice for devuser

[Slice]
CPUQuota=50%
MemoryLimit=2G
登录后复制

然后,加载并启用这个slice:

sudo systemctl enable user-devuser.slice
sudo systemctl start user-devuser.slice
登录后复制

接着,你需要配置

devuser
登录后复制
的所有进程都运行在这个slice下。这通常涉及到修改PAM模块配置,或者利用
systemd-logind
登录后复制
的特性,让用户登录时其会话自动归

以上就是如何在Linux中设置资源池 Linux cgroups用户限制的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号