使用cgconfig进行线程和进程共享(CPU限制)

使用cgconfig进行线程和进程共享(CPU限制)

我在 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 版本中没有通用的方法来执行此操作。 (模板单位稍后才会出现)

相关内容