Ubuntu中控制用户cpu资源分配控制步骤

发布于:2025-06-27 ⋅ 阅读:(11) ⋅ 点赞:(0)

目的:为了限制用户的cpu资源,

假设有不同的组,假设目前是dev组吧。;里面有四个用户 zhengtengfei lisi zhangsan liuyuan
限制 最多24核 服务器一共64核

先都加入到组里

usermod -aG dev zhengtengfei

创建针对 dev 组的 cgroup

sudo apt update
sudo apt install -y cgroup-tools
sudo mkdir -p /sys/fs/cgroup/cpu/dev_users

设置 CPU 限制

echo 100000 > /sys/fs/cgroup/cpu/dev_users/cpu.cfs_period_us
echo $((24 * 100000)) > /sys/fs/cgroup/cpu/dev_users/cpu.cfs_quota_us # 这里是24核

将 dev 组中的用户进程自动加入到该 cgroup(为了确保 dev 组的用户启动的所有进程都进入 /sys/fs/cgroup/cpu/dev_users,你需要使用 systemd 的服务管理功能或通过 pam_cgroup 模块实现自动绑定。)
安装libpam-cgroup
sudo apt install libpam-cgroup

编辑 /etc/pam.d/common-session 文件,添加如下行
session required pam_cgroup.so
编辑 /etc/cgconfig.conf 文件,添加如下内容(如果不存在则创建)

group dev_users {
cpu {
cpu.cfs_period_us = 100000;
cpu.cfs_quota_us = 2400000; # 24 * 100000
}
}

然后在 /etc/cgrules.conf 中添加规则,把 dev 组的用户进程归入这个 cgroup:

@dev cpu /dev_users

手动创建 systemd 服务文件

我们将分别为 cgconfig 和 cgrulesengd 创建 systemd 服务,并设置开机自启
sudo vim/etc/systemd/system/cgconfig.service

[Unit]
Description=Control Group configuration service
Before=cgrulesengd.service

[Service]
Type=oneshot
ExecStart=/usr/sbin/cgconfigparser -l /etc/cgconfig.conf
RemainAfterExit=yes
ExecStop=/usr/sbin/cgclear
StandardOutput=journal

[Install]
WantedBy=multi-user.target

sudo vim /etc/systemd/system/cgrulesengd.service

[Unit]
Description=Control Group Rules Engine Daemon
After=network.target cgconfig.service

[Service]
Type=forking
ExecStart=/usr/sbin/cgrulesengd
Restart=on-failure

[Install]
WantedBy=multi-user.target

做完后重启服务

sudo systemctl daemon-reexec
sudo systemctl daemon-reload

sudo systemctl start cgconfig.service
sudo systemctl enable cgconfig.service
sudo systemctl start cgrulesengd.service
sudo systemctl enable cgrulesengd.service
sudo systemctl status cgconfig
sudo systemctl status cgrulesengd

安装压测工具进行压测验证

apt install stress-ng
stress-ng --cpu 32 --timeout 1m #限制的是24,给他32核,用top命令查看占用,发现32核都使用了,但是cpu占用率百分比加起来不超过24核(2400%)

可以新开一个用户的终端进行验证查看

cpu百分比 = (2400000 / 100000)* 100% = 24 * 100% = 2400%


网站公告

今日签到

点亮在社区的每一天
去签到