为什么我的CPU限制不能通过cgroup

时间:2015-05-29 14:25:32

标签: linux linux-kernel cgroups

/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:/

有人能给我一些帮助吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

似乎应该正确应用cgroups设置cpu.shares

现代计算机通常有一个多核cpu。用于测试的python脚本只能使用100%的一个核心。因此,如果仍有空闲的cpu核心,则另一个脚本也可以使用该核心的100%。

测试cpu.shares的更好方法是运行多个进程,而不是cpu核心数。

cat /proc/cpuinfo表示cpu核心数。