2015-05-29 40 views
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:/ 

任何人都可以給我一些幫助嗎?非常感謝。

+0

如果CPU沒有爭用,那麼cpu.shares對CPU使用率不是「限制」。如果CPU處於空閒狀態,則任何進程都可以使用整個CPU,而不管其「cpu.shares」值如何。然而,當CPU出現爭用時,'cpu.shares'值用於確定進程給出的CPU時間百分比(「此進程'cpu.shares'」/「所有'cpu.shares總和'「)。 – twalberg

+0

關鍵問題是我的進程**不會按照預期與其他進程按比例共享cpu。我在不同的用戶上運行兩個相同的Python腳本,一個應該由cgroups保護,另一個是root。 cpu.shares分別是100和1024。但是這些進程幾乎平等地共享cpu。 @twalberg – Judking

回答

0

看來應該正確應用cgroups設置cpu.shares

現代計算機通常有一個多核cpu。用於測試的python腳本只能使用一個核心的100%。所以如果仍有空閒的cpu核心,另一個腳本也可以使用該核心的100%。

測試cpu.shares的更好方法是運行多個進程而不是CPU內核的數量。

cat /proc/cpuinfo表示CPU核心的數量。

相關問題