【发布时间】:2015-05-29 14:25:32
【问题描述】:
/etc/cgconfig.conf
...
group memlimit {
memory {
memory.limit_in_bytes = 8589934592;
}
}
group cpulimit {
cpu {
cpu.shares = 1024;
}
}
/etc/cgrules.conf:
@gatewayer memory memlimit/
@gatewayer cpu cpulimit/
我已经通过命令重启了服务:
service cgconfig restart
service cgred restart
从属于gatewayer 组的用户执行我的python 脚本后,我可以在执行cat /cgroup/memory/memlimit/cgroup.procs 时看到PID,并且限制已应用于正在运行的进程。但是,对cpu的限制没有生效,cat /cgroup/cpu/cpulimit/cgroup.procs没有按预期打印PID。
我尝试检查进程,结果是相同的结果,内存受 cgroups 限制,而 cpu 不受:
$ cat /proc/18113/cgroup
174:blkio:/
173:net_cls:/
172:freezer:/
171:devices:/
170:memory:/memlimit
169:cpuacct:/
168:cpu:/
167:cpuset:/
谁能给我一些帮助?非常感谢。
【问题讨论】:
-
如果没有 CPU 争用,
cpu.shares不是 CPU 使用的“限制”。如果 CPU 处于空闲状态,则任何进程都可以使用整个 CPU,而不管其cpu.shares值如何。但是,当存在 CPU 争用时,cpu.shares值用于确定给定进程的 CPU 时间百分比(“此进程cpu.shares”/“所有cpu.shares的总和”)。跨度> -
关键问题是我的进程没有按预期与其他进程按比例共享cpu。我在不同的用户上运行了两个相同的 python 脚本,一个应该由 cgroups 保护,另一个是 root。 cpu.shares 分别为 100 和 1024。但是这些进程实际上平等地共享 cpu。 @twalberg
标签: linux linux-kernel cgroups