我在 cgconfig 规则中为用户设置了以下限制
# cat /etc/cgconfig.conf
group group_mahmood {
cpu {
cpu.shares = 300;
}
memory {
memory.limit_in_bytes = 1073741824;
}
}
# cat /etc/cgrules.conf
mahmood cpu,memory grou_mahmood/
# service cgred restart
Redirecting to /bin/systemctl restart cgred.service
# service cgconfig restart
Redirecting to /bin/systemctl restart cgconfig.service
现在,当我运行stress命令时stress --cpu 8 --timeout 20
,top的输出是
28685 mahmood 20 0 7312 100 0 R 100.0 0.0 0:11.41 stress
28686 mahmood 20 0 7312 100 0 R 99.7 0.0 0:11.42 stress
28687 mahmood 20 0 7312 100 0 R 99.7 0.0 0:11.42 stress
28688 mahmood 20 0 7312 100 0 R 99.7 0.0 0:11.42 stress
28689 mahmood 20 0 7312 100 0 R 99.7 0.0 0:11.42 stress
28690 mahmood 20 0 7312 100 0 R 99.7 0.0 0:11.43 stress
28691 mahmood 20 0 7312 100 0 R 99.7 0.0 0:11.43 stress
28692 mahmood 20 0 7312 100 0 R 99.7 0.0 0:11.43 stress
看来共享限制是针对线程的(800%)。如何设置 cpu 限制进程数?实际上我需要两者,它们应该是逻辑“或”在一起。
答案1
您需要调整cpu.cfs_quota_us可调,而不是 cpu.shares。我链接到了 RHEL6 文档,但如果您cgred
在 RHEL7 中使用,也是一样的。
在与 systemd 相关的单元中,您可以设置CPU配额环境。您可以为 user-1001.slice 设置它(假设用户的 UID 为 1001),但在 RHEL7 中的 systemd 版本中没有通用的方法来执行此操作。 (模板单位稍后才会出现)