0
驗證/etc/cgconfig.conf爲什麼我的CPU限制不通過的cgroup
...
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腳本後,我可以看到執行時的PID cat /cgroup/memory/memlimit/cgroup.procs
並且限制已應用於正在運行的進程。但是,對cpu的限制不生效,並且cat /cgroup/cpu/cpulimit/cgroup.procs
不按預期打印PID。
我試圖檢查的過程中,和原來是一樣的結果,該內存由cgroup的限制,而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總和'「)。 – twalberg
關鍵問題是我的進程**不會按照預期與其他進程按比例共享cpu。我在不同的用戶上運行兩個相同的Python腳本,一個應該由cgroups保護,另一個是root。 cpu.shares分別是100和1024。但是這些進程幾乎平等地共享cpu。 @twalberg – Judking